{"version":3,"sources":["webpack:///./node_modules/xlsx/xlsx.js"],"names":["XLSX","version","current_codepage","current_ansi","cptable","global","window","VALID_ANSI","i","push","CS2CP","0","1","2","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","cp","indexOf","set_cp","reset_cp","char_codes","data","o","len","length","charCodeAt","debom","c1","c2","String","fromCharCode","join","utf16leread","slice","utf16beread","_getchar","x","_getansi","utils","decode","map","Base64","encode","input","c3","e1","e2","e3","e4","isNaN","charAt","replace","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","alloc","n","allocUnsafe","new_raw_buf","Array","new_unsafe_buf","s2a","s","split","s2ab","ArrayBuffer","view","Uint8Array","a2s","isArray","c","ab2a","Error","bconcat","bufs","concat","apply","chr0","chr1","SSF","make_ssf","_strrev","fill","l","pad0","v","d","t","pad_","rpad_","p2_32","Math","pow","pad0r","round","pad0r1","pad0r2","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","fix_hijri","basedate","dnthresh","getTime","base1904","datenum_local","epoch","getTimezoneOffset","_general_int","toString","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","V","log","LOG10E","toPrecision","w","toFixed","toExponential","small_exp","substr","large_exp","normalize_exp","toUpperCase","general_fmt","format","write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","_general_num","_general","write_num","pct1","frac1","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","_frac","write_num_flt","match","ffmt","idx","write_num_cm","sfmt","mul","write_num_pct","write_num_exp","period","ee","fakee","$$","$1","$2","$3","r","ri","ff","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f1","carry","oa","min","max","lres","rres","flr","write_num_int","write_num_cm2","write_num_pct2","write_num_exp2","write_num_f2","lastIndexOf","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","toLowerCase","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","dateNF","table","f","lat","m1","m2","choose_fmt","load_entry","undefined","load","_table","get_table","load_table","tbl","CRC32","XLMLFormatMap","SSFImplicit","dateNFregex","Int32Array","signed_crc_table","bstr","seed","C","L","crc32_buf_8","factory","_fs","CFB","fs","exports","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_extra_field","blob","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","header","shift","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","cnt","ENDOFCHAIN","sector","__readInt32LE","sector_list","sl","chkd","buf_chain","modulus","k","seen","addr","nodes","__toBuffer","make_sector_list","name","Paths","FileIndex","FullPaths","files","mini","minifat_store","pl","namelen","__utf16le","color","R","clsid","state","start","size","ct","read_date","storage","get_sector_list","content","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","payload","MSSZ","new_buf","offset","__readUInt32LE","init_cfb","cfb","root","CLSID","nm","find","rebuild_cfb","seed_cfb","gc","_file","pop","now","HEADER_CLSID","sort","Z","namecmp","elt","_write","_opts","fileType","cdirs","method","compression","start_cd","fcnt","fp","fi","crcs","sz_cd","namebuf","outbuf","_zlib","deflateRawSync","_deflate","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","b","rev","read_bits_2","bl","h","read_bits_3","read_bits_5","read_bits_7","read_bits_n","realloc","copy","a","set","zero_fill_array","_deflateRaw","boff","off","build_tree","clens","cmap","MAX","maxlen","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","h1","h2","_inflate","usz","woff","OL","max_len_1","max_len_2","bits","code","len_eb","dst_eb","dst","inflate","warn_or_throw","wrn","msg","console","error","csz","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","crc32","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","_crc32","cfb_add","unsafe","fpath","cfb_gc","path","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","splice","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","message","_inflateRaw","blobify","a2u","write_dl","fname","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createElement","createObjectURL","url","chrome","downloads","download","revokeObjectURL","setTimeout","href","body","appendChild","click","removeChild","$","File","Folder","open","encoding","close","keys","ks","Object","o2","prototype","hasOwnProperty","call","evert_key","obj","key","K","evert","evert_num","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","parseDate","fixdate","cc2str","arr","dup","JSON","stringify","fuzzynum","Number","test","wt","fuzzydate","NaN","getYear","jszip","safe_split_regex","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdata","getdatabin","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","zip_add_file","zip_new","resolve_path","result","target","step","JSZipSync","module","XML_HEADER","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","trim","strip_ns","encregex","coderegex","encodings","rencoding","unescapexml","text","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","xlml_unfixstr","parsexmlbool","value","utf8read","orig","utf8readb","ww","corpus","utf8readc","mtcache","entities","vt_cache","matchtag","RegExp","htmldecode","vtregex","vtvregex","vtmregex","parseVector","matches","baseType","res","WTF","forEach","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","__lpp4","___lpp4","XMLNS","XLMLNS","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","Infinity","read_double_le","is_buf","isBuffer","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","this","lens","__writeUInt16LE","WriteShift","cppayload","end","__writeUInt32LE","bs","av","isFinite","LN2","write_double_le","__writeInt32LE","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","XLSBRE","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","cstr","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","row","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__C","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","O","_crypto","crypto","rc4","md5","hex","createHash","update","digest","make_offcrypto","parse_BrtCommentText","write_BrtCommentText","run","write_StrRun","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","index","theme","nTS","tint","rgb","parse_ClipboardFormatOrString","3","8","14","VT_CUSTOM","DocSummaryPIDDSI","VT_VECTOR","SummaryPIDSI","SpecialProperties","DocSummaryRE","SummaryRE","CountryEnum","XLSFillPattern","XLSIcv","BErr","RBErr","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","styles","type2ct","evert_arr","CT","CTYPE_XML_ROOT","xsd","xsi","CTYPE_DEFAULTS","rels","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","get_rels_path","parse_rels","currentFilePath","hash","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","RELS_EXTERN","add_rels","rId","relobj","targetmode","write_rdf_type","write_meta_ods","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","dc","dcterms","dcmitype","cp_doit","EXT_PROPS","load_props_pairs","HP","TOP","props","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","EXT_PROPS_XML_ROOT","vt","CUST_PROPS","custregex","CUST_PROPS_XML_ROOT","write_cust_props","pid","write_vt","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","evert_XLMLDPM","xlml_set_prop","Props","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtVecUnalignedLpstr","ret","parse_VtVecUnalignedLpstrValue","parse_VtHeadingPair","parse_TypedPropertyValue","parse_VtVecHeadingPair","cElements","parse_VtVecHeadingPairValue","parse_dictionary","CodePage","dict","parse_BLOB","bytes","Size","parse_ClipboardData","parse_VtUnalignedString","write_TypedPropertyValue","write_FILETIME","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","writebool","parseuint16","writeuint16","parseuint16a","parslurp","parse_ShortXLUnicodeString","cch","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_HyperlinkMoniker","extra","parse_URLMoniker","ansiPath","parse_FileMoniker","parse_HyperlinkString","write_Hyperlink","hl","F","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","write_XLSCell","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtSkip","FtTab","cf","fSharedNote","parse_BOF","BIFFVer","write_BOF","wb","bookType","write_BoundSheet8","hs","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","write_Format","b5","parse_BIFF2Format","parse_Dimensions","write_XF","ixfeP","style","parse_BoolErr","parse_Bes","write_BoolErr","os","write_Bes","parse_XLHeaderFooter","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","parse_BIFF5OT","write_HLink","write_HLinkTooltip","TT","Tooltip","parse_ColInfo","cellStyles","colFirst","colLast","coldx","level","cchName","parse_Blank","parse_Scl","parse_String","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","fields","field","hend","sheetRows","dbf_to_aoa","_RLEN","to_workbook","to_sheet","from_sheet","codepage","aoa","sheet_to_json","headers","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","_s","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","5","6","7","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","formula","rc_to_a1","F_seen","hidden","wch","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_aoa","write_ws_cell_sylk","a1_to_rc","preamble","RS","rec","wpx","width2px","px2char","rows","px2pt","write_ws_rows_sylk","coord","DIF","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_aoa","push_field","push_value","topic","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","dsv_to_sheet_str","instr","guess_sep","sepcc","_re","finish_cell","Y","datestr","timestr","dateNF_fix","cellText","cellNF","outer","prn_to_sheet_str","lines","prn_to_aoa_str","prn_to_sheet","firstbyte","WK_","lotus_to_workbook_buf","sidx","snames","refguess","Enum","WK1Enum","WK3Enum","qpro","lotushopper","Rn","vers","parse_cell","parse_LABEL","parse_cell_3","parse_NUMBER_17","v1","v2","parse_NUMBER_27","parse_rs","tregex","rpregex","parse_r","rpr","font","pass","shadow","outline","strike","uval","family","valign","parse_rpr","rregex","rend","rs","filter","rs_to_html","nlregex","r_to_html","terms","intro","outro","align","parse_rpr2","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","SST","straywsregex","write_sst_xml","sst","bookSST","xmlns","main","count","Count","uniqueCount","Unique","sitag","write_BrtSSTItem","write_sst_bin","write_BrtBeginSst","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_Primary","U","W","parse_TransformInfoHeader","ename","cmode","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","PadArray","InitialCode","XorMatrix","XorRor","crypto_CreateXorArray_Method1","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","crypto_MakeXorDecryptor","XorArrayIndex","XorArray","Data","Value","crypto_DecryptData_Method1","parse_FilePassHeader","Info","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","RTF","rtf_to_sheet","rtf_to_sheet_str","rgb2Hex","rgb_tint","hsl","G","H6","L2","rgb2HSL","hex2RGB","X","h6","hsl2RGB","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","pt","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","themes","NumberFmt","formatCode","parse_numFmts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","indexed","icv","themeElements","clrScheme","parse_fonts","Fills","patternType","bgColor","fgColor","parse_fills","Borders","border","diagonalUp","diagonalDown","parse_borders","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","STYLES_XML_ROOT","write_sty_xml","NF","write_numFmts","cellXfs","write_cellXfs","write_BrtFmt","write_BrtFont","grbit","write_FontFlags","sss","charset","STY","rev_XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","write_BrtXF","write_Blxf","parse_BrtBorder","write_BORDERS_bin","write_BrtBorder","write_STYLES_bin","xfId","builtinId","write_BrtStyle","write_TABLESTYLES_bin","defTableStyle","defPivotStyle","write_BrtBeginTableStyles","write_sty_bin","write_FMTS_bin","write_FONTS_bin","write_FILLS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","write_DXFS_bin","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","parse_themeElements","Themes","themeXLSX","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_ExtProp","extType","parse_XFExtGradient","IMG","DRAW","_shapeid","write_comments_vml","csize","bbox","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","fillcolor","strokecolor","on","CMNT","CMNT_XML_ROOT","write_comments_xml","iauthor","parse_BrtCommentAuthor","write_comments_bin","comment","write_BrtCommentAuthor","write_BrtBeginComment","VBAFMTS","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","shift_formula_str","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","cols","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","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitSemi","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","get_ixti_raw","supbooks","XTI","SID","get_ixti","sname","formula_quote_sheet_name","stringify_formula","stack","nameidx","last_sp","sp","fflen","argc","func","args","lbl","names","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","write_Formula","o1","write_FormulaValue","o3","bf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","ods_to_csf_3D","_ssfopts","WS","browser_has_Map","Map","get_sst_id","has","revarr","get","col_obj_w","default_margins","margins","mode","defs","left","right","top","bottom","footer","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","ridx","parse_ws_xml_dim","svs","Views","sviewregex","rightToLeft","RTL","parse_ws_xml_sheetviews","columns","seencol","coli","colm","colM","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","merges","_merge","hlink","location","Rel","tooltip","rng","parse_ws_xml_hlinks","margin","parse_ws_xml_margins","tmpref","codeName","CodeName","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_cell","oldt","oldv","Strings","revStrings","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","ht","outlineLevel","rslice","cellFormula","xlfn","___f","si","_tag","_r","WS_XML_ROOT","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","Workbook","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","write_ws_xml_cols","params","height","_cell","customHeight","write_ws_xml_data","write_ws_xml_protection","Names","Sheet","Ref","write_ws_xml_autofilter","write_ws_xml_merges","relc","ignoreEC","numberStoredAsText","sqref","write_row_header","ncolspan","lcs","caddr","first","last","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","write_BrtCellRk","ncell","d100","write_RkNumber","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","write_BrtCellIsst","write_BrtCellSt","write_BrtCellReal","write_BrtCellBool","write_BrtCellBlank","write_MERGECELLS","write_BrtBeginMergeCells","write_COLINFOS","write_BrtColInfo","write_IGNOREECS","write_BrtCellIgnoreEC","write_HLINKS","locidx","write_BrtHLink","write_WSVIEWS2","write_BrtBeginWsView","write_SHEETPROTECT","write_BrtSheetProtection","write_ws_bin","write_BrtWsProp","cap","write_CELLTABLE","write_AUTOFILTER","write_BrtMargins","write_LEGACYDRAWING","parse_chart","csheet","nc","cache","num","nf","parse_Cache","CHART","CHARTEX","CS","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","defaults","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","check_wb","N","codes","cn","wbnsregex","WB_XML_ROOT","write_wb_xml","write_names","workbookPr","Hidden","sheetId","Comment","localSheetId","write_BrtBundleSh","iTabID","strRelID","write_BOOKVIEWS","vistab","write_BrtBookView","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","write_BUNDLESHS","parse_wb","R_n","Ptg","parse_wb_bin","dname","dnstart","parse_wb_xml","parse_ws","ai","af","aii","_d","relId","rfx","parse_ws_bin","parse_cs","parse_cs_bin","parse_cs_xml","parse_sty","parse_sty_bin","parse_sst","parse_sst_bin","parse_sst_xml","parse_cmnt","authors","author","parse_comments_bin","commentList","authtag","cmnttag","cm","authorId","guid","textMatch","parse_comments_xml","parse_cc","parse_cc_bin","parse_cc_xml","parse_xlink","parse_xlink_bin","write_wb","write_ws","write_sst","write_cmnt","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","oval","safe_format_xlml","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","opening","ishtml","HTML_","tmp","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","lastIndex","raw_Rn3","exec","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","xlml_write_docprops","BLACKLIST","xlml_write_custprops","write_name_xlml","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","skip","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_wsopts","write_xlml","write_sty_xlml","write_names_xlml","parse_compobj","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","slurp","insitu","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","cell_valid","XFs","palette","get_rgb","addcell","line","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_Rn","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","RecordType","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","ExternCount","tmpri","fakebs8","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_j","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","ext","xfe","Encryption","Metadata","Country","PSCLSID","parse_xlscfb","CompObj","WorkbookP","bookVBA","newcfb","newpath","make_vba_xls","DSI","DocSummary","SI","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","write_xlscfb","wbpath","write_biff_buf","Keys","DSEntries","SEntries","CEntries","CEntries2","write_xls_props","vba","fill_vba_xls","ArchID","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","parse_BrtColor","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","fAlwaysCalc","display","idObj","stAuthor","parse_NoteSh","verificationBytes","verifier","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","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","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","displayName","targetFrameName","moniker","oleMoniker","fileTime","Loc","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","parse_frtHeader","def","area","env","lcb","XLSRE","write_biff_rec","write_BIFF2Cell","write_ws_biff2_cell","write_BIFF2NUM","write_BIFF2BERR","write_BIFF2LABEL","write_biff2_buf","write_ws_biff2","write_FONTS_biff8","write_Font","write_ws_biff8_cell","write_Number","write_LabelSst","b8","write_Label","write_ws_biff8","_WB","_sheet","MAX_ROWS","guts","write_Guts","write_Dimensions","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","write_Window1","safe1904","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","write_biff_continue","write_SST","blen","fix_write_opts","write_biff8_buf","html_to_sheet","mtch2","re","split_regex","hd","midx","colspan","rowspan","_t","make_html_row","editable","make_html_preamble","_BEGIN","_END","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","children","hasAttribute","getAttribute","innerHTML","parse_dom_table","element","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","number_formats","parse_content_xml","day","month","year","hours","minutes","seconds","era","quarter","sheetag","rowtag","fixed","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","ods","FEtag","parse_manifest","write_styles_ods","write_content_ods","null_cell_xml","_Fref","text_p","_tgt","fods","write_automatic_styles_ods","write_ods","manifest","rdf","write_rdf","write_manifest","write_obj_str","write_sheet_index","write_htm_str","write_csv_str","sheet_to_csv","write_slk_str","write_dif_str","write_prn_str","write_rtf_str","write_txt_str","sheet_to_txt","write_dbf_buf","write_eth_str","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","chartp","parse_drawing","crelsp","parse_ds","encoded","sheet_insert_comments","strip_front_slash","binname","zipentries","dir","links","coreprops","extprops","custprops","calcchains","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","parse_theme","link","propdata","parse_ext_props","toks","warn","parse_cust_props","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","parse_DataSpaceVersionInfo","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","foo","vbafmt","write_core_props","_sn","_i","write_ext_props","wsrels","need_vml","rId1","write_sty","f1","f2","f3","write_ct","read_zip","base64","zip_read","read_plaintext","read_prn","readSync","infile","read_binary","bstrify","ab","vu","read_cfb","OLD_WTF","read_wb_ID","read_utf16","read_plaintext_raw","write_cfb_ctr","write_string_type","bom","write_binary_type","writeSync","write_stxt_type","write_cfb_type","oopts","generate","encrypt_agile","write_zip_type","resolve_book_type","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","Readable","split_cell","get_formulae","make_csv","make_json","make_formulae","json_to_sheet","table_to_sheet","table_to_book","sheet_to_html","sheet_to_row_object_array","get_default","ws_get_cell_stub","RC","book_new","book_append_sheet","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","rngstr","stream","to_json","objectMode","_read","to_html","to_csv","BOM","readFile","writeFileAsync","_cb","Function","make_xlsx_lib"],"mappings":"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EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,GAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,EAGR,IAAQ,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","file":"f10e284a-fcd4528612b43d972c15.js","sourcesContent":["require(\"core-js/modules/es.typed-array.sort.js\");\n\nrequire(\"core-js/modules/es.array.sort.js\");\n\n/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported XLSX */\n\n/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */\nvar XLSX = {};\n\nfunction make_xlsx_lib(XLSX) {\n XLSX.version = '0.16.9';\n var current_codepage = 1200,\n current_ansi = 1252;\n /*global cptable:true, window */\n\n if (typeof module !== \"undefined\" && typeof require !== 'undefined') {\n if (typeof cptable === 'undefined') {\n if (typeof global !== 'undefined') global.cptable = require('./dist/cpexcel.js');else if (typeof window !== 'undefined') window.cptable = require('./dist/cpexcel.js');\n }\n }\n\n var VALID_ANSI = [874, 932, 936, 949, 950];\n\n for (var i = 0; i <= 8; ++i) {\n VALID_ANSI.push(1250 + i);\n }\n /* ECMA-376 Part I 18.4.1 charset to codepage mapping */\n\n\n var CS2CP = {\n 0: 1252,\n\n /* ANSI */\n 1: 65001,\n\n /* DEFAULT */\n 2: 65001,\n\n /* SYMBOL */\n 77: 10000,\n\n /* MAC */\n 128: 932,\n\n /* SHIFTJIS */\n 129: 949,\n\n /* HANGUL */\n 130: 1361,\n\n /* JOHAB */\n 134: 936,\n\n /* GB2312 */\n 136: 950,\n\n /* CHINESEBIG5 */\n 161: 1253,\n\n /* GREEK */\n 162: 1254,\n\n /* TURKISH */\n 163: 1258,\n\n /* VIETNAMESE */\n 177: 1255,\n\n /* HEBREW */\n 178: 1256,\n\n /* ARABIC */\n 186: 1257,\n\n /* BALTIC */\n 204: 1251,\n\n /* RUSSIAN */\n 222: 874,\n\n /* THAI */\n 238: 1250,\n\n /* EASTEUROPE */\n 255: 1252,\n\n /* OEM */\n 69: 6969\n /* MISC */\n\n };\n\n var set_ansi = function set_ansi(cp) {\n if (VALID_ANSI.indexOf(cp) == -1) return;\n current_ansi = CS2CP[0] = cp;\n };\n\n function reset_ansi() {\n set_ansi(1252);\n }\n\n var set_cp = function set_cp(cp) {\n current_codepage = cp;\n set_ansi(cp);\n };\n\n function reset_cp() {\n set_cp(1200);\n reset_ansi();\n }\n\n function char_codes(data) {\n var o = [];\n\n for (var i = 0, len = data.length; i < len; ++i) {\n o[i] = data.charCodeAt(i);\n }\n\n return o;\n }\n\n function utf16leread(data) {\n var o = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i) + (data.charCodeAt(2 * i + 1) << 8));\n }\n\n return o.join(\"\");\n }\n\n function utf16beread(data) {\n var o = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i + 1) + (data.charCodeAt(2 * i) << 8));\n }\n\n return o.join(\"\");\n }\n\n var debom = function debom(data) {\n var c1 = data.charCodeAt(0),\n c2 = data.charCodeAt(1);\n if (c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n if (c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n if (c1 == 0xFEFF) return data.slice(1);\n return data;\n };\n\n var _getchar = function _gc1(x) {\n return String.fromCharCode(x);\n };\n\n var _getansi = function _ga1(x) {\n return String.fromCharCode(x);\n };\n\n if (typeof cptable !== 'undefined') {\n set_cp = function set_cp(cp) {\n current_codepage = cp;\n set_ansi(cp);\n };\n\n debom = function debom(data) {\n if (data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) {\n return cptable.utils.decode(1200, char_codes(data.slice(2)));\n }\n\n return data;\n };\n\n _getchar = function _gc2(x) {\n if (current_codepage === 1200) return String.fromCharCode(x);\n return cptable.utils.decode(current_codepage, [x & 255, x >> 8])[0];\n };\n\n _getansi = function _ga2(x) {\n return cptable.utils.decode(current_ansi, [x])[0];\n };\n }\n\n var DENSE = null;\n var DIF_XL = true;\n\n var Base64 = function make_b64() {\n var map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return {\n encode: function encode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n\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\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n\n o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n }\n\n return o;\n },\n decode: function b64_decode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\n for (var i = 0; i < input.length;) {\n e1 = map.indexOf(input.charAt(i++));\n e2 = map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n\n e4 = map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n\n return o;\n }\n };\n }();\n\n var has_buf = typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node;\n\n var Buffer_from = function Buffer_from() {};\n\n if (typeof Buffer !== 'undefined') {\n var nbfs = !Buffer.from;\n if (!nbfs) try {\n Buffer.from(\"foo\", \"utf8\");\n } catch (e) {\n nbfs = true;\n }\n Buffer_from = nbfs ? function (buf, enc) {\n return enc ? new Buffer(buf, enc) : new Buffer(buf);\n } : Buffer.from.bind(Buffer); // $FlowIgnore\n\n if (!Buffer.alloc) Buffer.alloc = function (n) {\n return new Buffer(n);\n }; // $FlowIgnore\n\n if (!Buffer.allocUnsafe) Buffer.allocUnsafe = function (n) {\n return new Buffer(n);\n };\n }\n\n function new_raw_buf(len) {\n /* jshint -W056 */\n return has_buf ? Buffer.alloc(len) : new Array(len);\n /* jshint +W056 */\n }\n\n function new_unsafe_buf(len) {\n /* jshint -W056 */\n return has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n /* jshint +W056 */\n }\n\n var s2a = function s2a(s) {\n if (has_buf) return Buffer_from(s, \"binary\");\n return s.split(\"\").map(function (x) {\n return x.charCodeAt(0) & 0xff;\n });\n };\n\n function s2ab(s) {\n if (typeof ArrayBuffer === 'undefined') return s2a(s);\n var buf = new ArrayBuffer(s.length),\n view = new Uint8Array(buf);\n\n for (var i = 0; i != s.length; ++i) {\n view[i] = s.charCodeAt(i) & 0xFF;\n }\n\n return buf;\n }\n\n function a2s(data) {\n if (Array.isArray(data)) return data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\"\");\n var o = [];\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = String.fromCharCode(data[i]);\n }\n\n return o.join(\"\");\n }\n\n function a2u(data) {\n if (typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n return new Uint8Array(data);\n }\n\n function ab2a(data) {\n if (typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n if (data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n var o = new Array(data.length);\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = data[i];\n }\n\n return o;\n }\n\n var bconcat = function bconcat(bufs) {\n return [].concat.apply([], bufs);\n };\n\n var chr0 = /\\u0000/g,\n chr1 = /[\\u0001-\\u0006]/g;\n /* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n /*jshint -W041 */\n\n var SSF = {};\n\n var make_ssf = function make_ssf(SSF) {\n SSF.version = '0.11.2';\n\n function _strrev(x) {\n var o = \"\",\n i = x.length - 1;\n\n while (i >= 0) {\n o += x.charAt(i--);\n }\n\n return o;\n }\n\n function fill(c, l) {\n var o = \"\";\n\n while (o.length < l) {\n o += c;\n }\n\n return o;\n }\n\n function pad0(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n function pad_(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill(' ', d - t.length) + t;\n }\n\n function rpad_(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : t + fill(' ', d - t.length);\n }\n\n function pad0r1(v, d) {\n var t = \"\" + Math.round(v);\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n function pad0r2(v, d) {\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n }\n\n var p2_32 = Math.pow(2, 32);\n\n function pad0r(v, d) {\n if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n var i = Math.round(v);\n return pad0r2(i, d);\n }\n\n function isgeneral(s, i) {\n i = i || 0;\n 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;\n }\n\n var days = [['Sun', 'Sunday'], ['Mon', 'Monday'], ['Tue', 'Tuesday'], ['Wed', 'Wednesday'], ['Thu', 'Thursday'], ['Fri', 'Friday'], ['Sat', 'Saturday']];\n var months = [['J', 'Jan', 'January'], ['F', 'Feb', 'February'], ['M', 'Mar', 'March'], ['A', 'Apr', 'April'], ['M', 'May', 'May'], ['J', 'Jun', 'June'], ['J', 'Jul', 'July'], ['A', 'Aug', 'August'], ['S', 'Sep', 'September'], ['O', 'Oct', 'October'], ['N', 'Nov', 'November'], ['D', 'Dec', 'December']];\n\n function init_table(t) {\n t[0] = 'General';\n t[1] = '0';\n t[2] = '0.00';\n t[3] = '#,##0';\n t[4] = '#,##0.00';\n t[9] = '0%';\n t[10] = '0.00%';\n t[11] = '0.00E+00';\n t[12] = '# ?/?';\n t[13] = '# ??/??';\n t[14] = 'm/d/yy';\n t[15] = 'd-mmm-yy';\n t[16] = 'd-mmm';\n t[17] = 'mmm-yy';\n t[18] = 'h:mm AM/PM';\n t[19] = 'h:mm:ss AM/PM';\n t[20] = 'h:mm';\n t[21] = 'h:mm:ss';\n t[22] = 'm/d/yy h:mm';\n t[37] = '#,##0 ;(#,##0)';\n t[38] = '#,##0 ;[Red](#,##0)';\n t[39] = '#,##0.00;(#,##0.00)';\n t[40] = '#,##0.00;[Red](#,##0.00)';\n t[45] = 'mm:ss';\n t[46] = '[h]:mm:ss';\n t[47] = 'mmss.0';\n t[48] = '##0.0E+0';\n t[49] = '@';\n t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n }\n\n var table_fmt = {};\n init_table(table_fmt);\n /* Defaults determined by systematically testing in Excel 2019 */\n\n /* These formats appear to default to other formats in the table */\n\n var default_map = [];\n var defi = 0; // 5 -> 37 ... 8 -> 40\n\n for (defi = 5; defi <= 8; ++defi) {\n default_map[defi] = 32 + defi;\n } // 23 -> 0 ... 26 -> 0\n\n\n for (defi = 23; defi <= 26; ++defi) {\n default_map[defi] = 0;\n } // 27 -> 14 ... 31 -> 14\n\n\n for (defi = 27; defi <= 31; ++defi) {\n default_map[defi] = 14;\n } // 50 -> 14 ... 58 -> 14\n\n\n for (defi = 50; defi <= 58; ++defi) {\n default_map[defi] = 14;\n } // 59 -> 1 ... 62 -> 4\n\n\n for (defi = 59; defi <= 62; ++defi) {\n default_map[defi] = defi - 58;\n } // 67 -> 9 ... 68 -> 10\n\n\n for (defi = 67; defi <= 68; ++defi) {\n default_map[defi] = defi - 58;\n } // 72 -> 14 ... 75 -> 17\n\n\n for (defi = 72; defi <= 75; ++defi) {\n default_map[defi] = defi - 58;\n } // 69 -> 12 ... 71 -> 14\n\n\n for (defi = 67; defi <= 68; ++defi) {\n default_map[defi] = defi - 57;\n } // 76 -> 20 ... 78 -> 22\n\n\n for (defi = 76; defi <= 78; ++defi) {\n default_map[defi] = defi - 56;\n } // 79 -> 45 ... 81 -> 47\n\n\n for (defi = 79; defi <= 81; ++defi) {\n default_map[defi] = defi - 34;\n } // 82 -> 0 ... 65536 -> 0 (omitted)\n\n /* These formats technically refer to Accounting formats with no equivalent */\n\n\n var default_str = []; // 5 -- Currency, 0 decimal, black negative\n\n default_str[5] = default_str[63] = '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)'; // 6 -- Currency, 0 decimal, red negative\n\n default_str[6] = default_str[64] = '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)'; // 7 -- Currency, 2 decimal, black negative\n\n default_str[7] = default_str[65] = '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)'; // 8 -- Currency, 2 decimal, red negative\n\n default_str[8] = default_str[66] = '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)'; // 41 -- Accounting, 0 decimal, No Symbol\n\n default_str[41] = '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)'; // 42 -- Accounting, 0 decimal, $ Symbol\n\n default_str[42] = '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)'; // 43 -- Accounting, 2 decimal, No Symbol\n\n default_str[43] = '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)'; // 44 -- Accounting, 2 decimal, $ Symbol\n\n default_str[44] = '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)';\n\n function frac(x, D, mixed) {\n var sgn = x < 0 ? -1 : 1;\n var B = x * sgn;\n var P_2 = 0,\n P_1 = 1,\n P = 0;\n var Q_2 = 1,\n Q_1 = 0,\n Q = 0;\n var A = Math.floor(B);\n\n while (Q_1 < D) {\n A = Math.floor(B);\n P = A * P_1 + P_2;\n Q = A * Q_1 + Q_2;\n if (B - A < 0.00000005) break;\n B = 1 / (B - A);\n P_2 = P_1;\n P_1 = P;\n Q_2 = Q_1;\n Q_1 = Q;\n }\n\n if (Q > D) {\n if (Q_1 > D) {\n Q = Q_2;\n P = P_2;\n } else {\n Q = Q_1;\n P = P_1;\n }\n }\n\n if (!mixed) return [0, sgn * P, Q];\n var q = Math.floor(sgn * P / Q);\n return [q, sgn * P - q * Q, Q];\n }\n\n function parse_date_code(v, opts, b2) {\n if (v > 2958465 || v < 0) return null;\n var date = v | 0,\n time = Math.floor(86400 * (v - date)),\n dow = 0;\n var dout = [];\n var out = {\n D: date,\n T: time,\n u: 86400 * (v - date) - time,\n y: 0,\n m: 0,\n d: 0,\n H: 0,\n M: 0,\n S: 0,\n q: 0\n };\n if (Math.abs(out.u) < 1e-6) out.u = 0;\n if (opts && opts.date1904) date += 1462;\n\n if (out.u > 0.9999) {\n out.u = 0;\n\n if (++time == 86400) {\n out.T = time = 0;\n ++date;\n ++out.D;\n }\n }\n\n if (date === 60) {\n dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n dow = 3;\n } else if (date === 0) {\n dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n dow = 6;\n } else {\n if (date > 60) --date;\n /* 1 = Jan 1 1900 in Gregorian */\n\n var d = new Date(1900, 0, 1);\n d.setDate(d.getDate() + date - 1);\n dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n dow = d.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n if (b2) dow = fix_hijri(d, dout);\n }\n\n out.y = dout[0];\n out.m = dout[1];\n out.d = dout[2];\n out.S = time % 60;\n time = Math.floor(time / 60);\n out.M = time % 60;\n time = Math.floor(time / 60);\n out.H = time;\n out.q = dow;\n return out;\n }\n\n SSF.parse_date_code = parse_date_code;\n var basedate = new Date(1899, 11, 31, 0, 0, 0);\n var dnthresh = basedate.getTime();\n var base1904 = new Date(1900, 2, 1, 0, 0, 0);\n\n function datenum_local(v, date1904) {\n var epoch = v.getTime();\n if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;else if (v >= base1904) epoch += 24 * 60 * 60 * 1000;\n return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n }\n /* The longest 32-bit integer text is \"-4294967296\", exactly 11 chars */\n\n\n function general_fmt_int(v) {\n return v.toString(10);\n }\n\n SSF._general_int = general_fmt_int;\n /* ECMA-376 18.8.30 numFmt*/\n\n /* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n\n var general_fmt_num = function make_general_fmt_num() {\n var trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\n function strip_decimal(o) {\n return o.indexOf(\".\") == -1 ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n }\n /* General Exponential always shows 2 digits exp and trims the mantissa */\n\n\n var mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n var exp_with_single_digit = /(E[+-])(\\d)$/;\n\n function normalize_exp(o) {\n if (o.indexOf(\"E\") == -1) return o;\n return o.replace(mantissa_zeroes_and_decimal, \"$1E\").replace(exp_with_single_digit, \"$10$2\");\n }\n /* exponent >= -9 and <= 9 */\n\n\n function small_exp(v) {\n var w = v < 0 ? 12 : 11;\n var o = strip_decimal(v.toFixed(12));\n if (o.length <= w) return o;\n o = v.toPrecision(10);\n if (o.length <= w) return o;\n return v.toExponential(5);\n }\n /* exponent >= 11 or <= -10 likely exponential */\n\n\n function large_exp(v) {\n var o = strip_decimal(v.toFixed(11));\n return o.length > (v < 0 ? 12 : 11) || o === \"0\" || o === \"-0\" ? v.toPrecision(6) : o;\n }\n\n function general_fmt_num_base(v) {\n var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E),\n o;\n if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);else if (Math.abs(V) <= 9) o = small_exp(v);else if (V === 10) o = v.toFixed(10).substr(0, 12);else o = large_exp(v);\n return strip_decimal(normalize_exp(o.toUpperCase()));\n }\n\n return general_fmt_num_base;\n }();\n\n SSF._general_num = general_fmt_num;\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 \tTODO: technically the display depends on the width of the cell\n */\n\n function general_fmt(v, opts) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? \"TRUE\" : \"FALSE\";\n\n case 'number':\n return (v | 0) === v ? v.toString(10) : general_fmt_num(v);\n\n case 'undefined':\n return \"\";\n\n case 'object':\n if (v == null) return \"\";\n if (v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n }\n\n throw new Error(\"unsupported value in General format: \" + v);\n }\n\n SSF._general = general_fmt;\n\n function fix_hijri(date, o) {\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 } //var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n\n /*jshint -W086 */\n\n\n function write_date(type, fmt, val, ss0) {\n var o = \"\",\n ss = 0,\n tt = 0,\n y = val.y,\n out,\n outl = 0;\n\n switch (type) {\n case 98:\n /* 'b' buddhist year */\n y = val.y + 543;\n\n /* falls through */\n\n case 121:\n /* 'y' year */\n switch (fmt.length) {\n case 1:\n case 2:\n out = y % 100;\n outl = 2;\n break;\n\n default:\n out = y % 10000;\n outl = 4;\n break;\n }\n\n break;\n\n case 109:\n /* 'm' month */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.m;\n outl = fmt.length;\n break;\n\n case 3:\n return months[val.m - 1][1];\n\n case 5:\n return months[val.m - 1][0];\n\n default:\n return months[val.m - 1][2];\n }\n\n break;\n\n case 100:\n /* 'd' day */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.d;\n outl = fmt.length;\n break;\n\n case 3:\n return days[val.q][0];\n\n default:\n return days[val.q][1];\n }\n\n break;\n\n case 104:\n /* 'h' 12-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = 1 + (val.H + 11) % 12;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 72:\n /* 'H' 24-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.H;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 77:\n /* 'M' minutes */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.M;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad minute format: ' + fmt;\n }\n\n break;\n\n case 115:\n /* 's' seconds */\n if (fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n if (val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;else tt = ss0 === 1 ? 10 : 1;\n ss = Math.round(tt * (val.S + val.u));\n if (ss >= 60 * tt) ss = 0;\n if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n o = pad0(ss, 2 + ss0);\n if (fmt === 'ss') return o.substr(0, 2);\n return \".\" + o.substr(2, fmt.length - 1);\n\n case 90:\n /* 'Z' absolute time */\n switch (fmt) {\n case '[h]':\n case '[hh]':\n out = val.D * 24 + val.H;\n break;\n\n case '[m]':\n case '[mm]':\n out = (val.D * 24 + val.H) * 60 + val.M;\n break;\n\n case '[s]':\n case '[ss]':\n out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n break;\n\n default:\n throw 'bad abstime format: ' + fmt;\n }\n\n outl = fmt.length === 3 ? 1 : 2;\n break;\n\n case 101:\n /* 'e' era */\n out = y;\n outl = 1;\n break;\n }\n\n var outstr = outl > 0 ? pad0(out, outl) : \"\";\n return outstr;\n }\n /*jshint +W086 */\n\n\n function commaify(s) {\n var w = 3;\n if (s.length <= w) return s;\n var j = s.length % w,\n o = s.substr(0, j);\n\n for (; j != s.length; j += w) {\n o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n }\n\n return o;\n }\n\n var write_num = function make_write_num() {\n var pct1 = /%/g;\n\n function write_num_pct(type, fmt, val) {\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_cm(type, fmt, val) {\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_exp(fmt, val) {\n var o;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (o.indexOf(\"e\") === -1) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n\n while (o.substr(0, 2) === \"0.\") {\n o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n }\n\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n var frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\n function write_num_f1(r, aval, sign) {\n var den = parseInt(r[4], 10),\n rr = Math.round(aval * den),\n base = Math.floor(rr / den);\n var myn = rr - base * den,\n myd = den;\n return 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 }\n\n function write_num_f2(r, aval, sign) {\n return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n }\n\n var dec1 = /^#*0*\\.([0#]+)/;\n var closeparen = /\\).*[0#]/;\n var phone = /\\(###\\) ###\\\\?-####/;\n\n function hashq(str) {\n var o = \"\",\n cc;\n\n for (var i = 0; i != str.length; ++i) {\n switch (cc = str.charCodeAt(i)) {\n case 35:\n break;\n\n case 63:\n o += \" \";\n break;\n\n case 48:\n o += \"0\";\n break;\n\n default:\n o += String.fromCharCode(cc);\n }\n }\n\n return o;\n }\n\n function rnd(val, d) {\n var dd = Math.pow(10, d);\n return \"\" + Math.round(val * dd) / dd;\n }\n\n function dec(val, d) {\n var _frac = val - Math.floor(val),\n dd = Math.pow(10, d);\n\n if (d < ('' + Math.round(_frac * dd)).length) return 0;\n return Math.round(_frac * dd);\n }\n\n function carry(val, d) {\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 1;\n }\n\n return 0;\n }\n\n function flr(val) {\n if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? val | 0 : val - 1 | 0);\n return \"\" + Math.floor(val);\n }\n\n function write_num_flt(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_flt('n', ffmt, val);\n return '(' + write_num_flt('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = pad0r(val, 0);\n if (o === \"0\") o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f1(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(pad0r(aval, 0));\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return 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 }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_flt(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = pad0r(val, 0);\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0?]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n ri = dec(val, r[1].length);\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(ri, r[1].length);\n }\n\n switch (fmt) {\n case \"###,##0.00\":\n return write_num_flt(type, \"#,##0.00\", val);\n\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(pad0r(aval, 0));\n return x !== \"0\" ? sign + x : \"\";\n\n case \"###,###.00\":\n return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n\n case \"#,###.00\":\n return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n\n default:\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n function write_num_cm2(type, fmt, val) {\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n }\n\n function write_num_pct2(type, fmt, val) {\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n }\n\n function write_num_exp2(fmt, val) {\n var o;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (!o.match(/[Ee]/)) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n }\n\n function write_num_int(type, fmt, val) {\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_int('n', ffmt, val);\n return '(' + write_num_int('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = \"\" + val;\n if (val === 0) o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f2(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(\"\" + aval);\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val) + \".\" + fill('0', r[1].length);\n }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_int(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(r[4].length, 7);\n ff = frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\", r[1], ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa + r[2] + \"/\" + r[3];\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = \"\" + val;\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(0, r[1].length);\n }\n\n switch (fmt) {\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(\"\" + aval);\n return x !== \"0\" ? sign + x : \"\";\n\n default:\n if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n }\n\n return function write_num(type, fmt, val) {\n return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n };\n }();\n\n function split_fmt(fmt) {\n var out = [];\n var in_str = false\n /*, cc*/\n ;\n\n for (var i = 0, j = 0; i < fmt.length; ++i) {\n switch (\n /*cc=*/\n fmt.charCodeAt(i)) {\n case 34:\n /* '\"' */\n in_str = !in_str;\n break;\n\n case 95:\n case 42:\n case 92:\n /* '_' '*' '\\\\' */\n ++i;\n break;\n\n case 59:\n /* ';' */\n out[out.length] = fmt.substr(j, i - j);\n j = i + 1;\n }\n }\n\n out[out.length] = fmt.substr(j);\n if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n return out;\n }\n\n SSF._split = split_fmt;\n var abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\n\n function fmt_is_date(fmt) {\n var i = 0,\n\n /*cc = 0,*/\n c = \"\",\n o = \"\";\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n if (isgeneral(fmt, i)) i += 6;\n i++;\n break;\n\n case '\"':\n for (;\n /*cc=*/\n fmt.charCodeAt(++i) !== 34 && i < fmt.length;) {\n /*empty*/\n }\n\n ++i;\n break;\n\n case '\\\\':\n i += 2;\n break;\n\n case '_':\n i += 2;\n break;\n\n case '@':\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n return true;\n\n case 'A':\n case 'a':\n case '上':\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n ++i;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.match(abstime)) return true;\n break;\n\n case '.':\n /* falls through */\n\n case '0':\n case '#':\n while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) {\n /* empty */\n }\n\n break;\n\n case '?':\n while (fmt.charAt(++i) === c) {\n /* empty */\n }\n\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n\n case '(':\n case ')':\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n /* empty */\n }\n\n break;\n\n case ' ':\n ++i;\n break;\n\n default:\n ++i;\n break;\n }\n }\n\n return false;\n }\n\n SSF.is_date = fmt_is_date;\n\n function eval_fmt(fmt, v, opts, flen) {\n var out = [],\n o = \"\",\n i = 0,\n c = \"\",\n lst = 't',\n dt,\n j,\n cc;\n var hr = 'H';\n /* Tokenize */\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n /* General */\n if (!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 'G',\n v: 'General'\n };\n i += 7;\n break;\n\n case '\"':\n /* Literal text */\n for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) {\n o += String.fromCharCode(cc);\n }\n\n out[out.length] = {\n t: 't',\n v: o\n };\n ++i;\n break;\n\n case '\\\\':\n var w = fmt.charAt(++i),\n t = w === \"(\" || w === \")\" ? w : 't';\n out[out.length] = {\n t: t,\n v: w\n };\n ++i;\n break;\n\n case '_':\n out[out.length] = {\n t: 't',\n v: \" \"\n };\n i += 2;\n break;\n\n case '@':\n /* Text Placeholder */\n out[out.length] = {\n t: 'T',\n v: v\n };\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n if (dt == null) {\n dt = parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'X',\n v: fmt.substr(i, 2)\n };\n lst = c;\n i += 2;\n break;\n }\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n c = c.toLowerCase();\n\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n if (v < 0) return \"\";\n\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n o = c;\n\n while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) {\n o += c;\n }\n\n if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n if (c === 'h') c = hr;\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case 'A':\n case 'a':\n case '上':\n var q = {\n t: c,\n v: c\n };\n if (dt == null) dt = parse_date_code(v, opts);\n\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n q.t = 'T';\n hr = 'h';\n i += 3;\n } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") {\n if (dt != null) q.v = dt.H >= 12 ? \"下午\" : \"上午\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else {\n q.t = \"t\";\n ++i;\n }\n\n if (dt == null && q.t === 'T') return \"\";\n out[out.length] = q;\n lst = c;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\n if (o.match(abstime)) {\n if (dt == null) {\n dt = parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'Z',\n v: o.toLowerCase()\n };\n lst = o.charAt(1);\n } else if (o.indexOf(\"$\") > -1) {\n o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n if (!fmt_is_date(fmt)) out[out.length] = {\n t: 't',\n v: o\n };\n }\n\n break;\n\n /* Numbers */\n\n case '.':\n if (dt != null) {\n o = c;\n\n while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") {\n o += c;\n }\n\n out[out.length] = {\n t: 's',\n v: o\n };\n break;\n }\n\n /* falls through */\n\n case '0':\n case '#':\n o = c;\n\n while (++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) {\n o += c;\n }\n\n out[out.length] = {\n t: 'n',\n v: o\n };\n break;\n\n case '?':\n o = c;\n\n while (fmt.charAt(++i) === c) {\n o += c;\n }\n\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n // **\n\n case '(':\n case ')':\n out[out.length] = {\n t: flen === 1 ? 't' : c,\n v: c\n };\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n o = c;\n\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n o += fmt.charAt(i);\n }\n\n out[out.length] = {\n t: 'D',\n v: o\n };\n break;\n\n case ' ':\n out[out.length] = {\n t: c,\n v: c\n };\n ++i;\n break;\n\n case '$':\n out[out.length] = {\n t: 't',\n v: '$'\n };\n ++i;\n break;\n\n default:\n if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 't',\n v: c\n };\n ++i;\n break;\n }\n }\n /* Scan for date/time parts */\n\n\n var bt = 0,\n ss0 = 0,\n ssm;\n\n for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n switch (out[i].t) {\n case 'h':\n case 'H':\n out[i].t = hr;\n lst = 'h';\n if (bt < 1) bt = 1;\n break;\n\n case 's':\n if (ssm = out[i].v.match(/\\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);\n if (bt < 3) bt = 3;\n\n /* falls through */\n\n case 'd':\n case 'y':\n case 'M':\n case 'e':\n lst = out[i].t;\n break;\n\n case 'm':\n if (lst === 's') {\n out[i].t = 'M';\n if (bt < 2) bt = 2;\n }\n\n break;\n\n case 'X':\n /*if(out[i].v === \"B2\");*/\n break;\n\n case 'Z':\n if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n }\n }\n /* time rounding depends on presence of minute / second / usec fields */\n\n\n switch (bt) {\n case 0:\n break;\n\n case 1:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n if (dt.M >= 60) {\n dt.M = 0;\n ++dt.H;\n }\n\n break;\n\n case 2:\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n break;\n }\n /* replace fields */\n\n\n var nstr = \"\",\n jj;\n\n for (i = 0; i < out.length; ++i) {\n switch (out[i].t) {\n case 't':\n case 'T':\n case ' ':\n case 'D':\n break;\n\n case 'X':\n out[i].v = \"\";\n out[i].t = \";\";\n break;\n\n case 'd':\n case 'm':\n case 'y':\n case 'h':\n case 'H':\n case 'M':\n case 's':\n case 'e':\n case 'b':\n case 'Z':\n out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n out[i].t = 't';\n break;\n\n case 'n':\n case '?':\n jj = i + 1;\n\n while (out[jj] != null && ((c = out[jj].t) === \"?\" || c === \"D\" || (c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/') || out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') || c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t == '?'))) {\n out[i].v += out[jj].v;\n out[jj] = {\n v: \"\",\n t: \";\"\n };\n ++jj;\n }\n\n nstr += out[i].v;\n i = jj - 1;\n break;\n\n case 'G':\n out[i].t = 't';\n out[i].v = general_fmt(v, opts);\n break;\n }\n }\n\n var vv = \"\",\n myv,\n ostr;\n\n if (nstr.length > 0) {\n if (nstr.charCodeAt(0) == 40)\n /* '(' */\n {\n myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;\n ostr = write_num('n', nstr, myv);\n } else {\n myv = v < 0 && flen > 1 ? -v : v;\n ostr = write_num('n', nstr, myv);\n\n if (myv < 0 && out[0] && out[0].t == 't') {\n ostr = ostr.substr(1);\n out[0].v = \"-\" + out[0].v;\n }\n }\n\n jj = ostr.length - 1;\n var decpt = out.length;\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) {\n decpt = i;\n break;\n }\n }\n\n var lasti = out.length;\n\n if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n for (i = out.length - 1; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\n if (jj >= out[i].v.length - 1) {\n jj -= out[i].v.length;\n out[i].v = ostr.substr(jj + 1, out[i].v.length);\n } else if (jj < 0) out[i].v = \"\";else {\n out[i].v = ostr.substr(0, jj + 1);\n jj = -1;\n }\n\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n jj = ostr.indexOf(\".\") - 1;\n\n for (i = decpt; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n vv = out[i].v.substr(j + 1);\n\n for (; j >= 0; --j) {\n if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n jj = ostr.indexOf(\".\") + 1;\n\n for (i = decpt; i < out.length; ++i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n vv = out[i].v.substr(0, j);\n\n for (; j < out[i].v.length; ++j) {\n if (jj < ostr.length) vv += ostr.charAt(jj++);\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n }\n }\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && 'n?'.indexOf(out[i].t) > -1) {\n myv = flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v;\n out[i].v = write_num(out[i].t, out[i].v, myv);\n out[i].t = 't';\n }\n }\n\n var retval = \"\";\n\n for (i = 0; i !== out.length; ++i) {\n if (out[i] != null) retval += out[i].v;\n }\n\n return retval;\n }\n\n SSF._eval = eval_fmt;\n var cfregex = /\\[[=<>]/;\n var cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\n\n function chkcond(v, rr) {\n if (rr == null) return false;\n var thresh = parseFloat(rr[2]);\n\n switch (rr[1]) {\n case \"=\":\n if (v == thresh) return true;\n break;\n\n case \">\":\n if (v > thresh) return true;\n break;\n\n case \"<\":\n if (v < thresh) return true;\n break;\n\n case \"<>\":\n if (v != thresh) return true;\n break;\n\n case \">=\":\n if (v >= thresh) return true;\n break;\n\n case \"<=\":\n if (v <= thresh) return true;\n break;\n }\n\n return false;\n }\n\n function choose_fmt(f, v) {\n var fmt = split_fmt(f);\n var l = fmt.length,\n lat = fmt[l - 1].indexOf(\"@\");\n if (l < 4 && lat > -1) --l;\n if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n\n switch (fmt.length) {\n case 1:\n fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n break;\n\n case 2:\n fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n break;\n\n case 3:\n fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n break;\n\n case 4:\n break;\n }\n\n var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\n if (fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n var m1 = fmt[0].match(cfregex2);\n var m2 = fmt[1].match(cfregex2);\n return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n }\n\n return [l, ff];\n }\n\n function format(fmt, v, o) {\n if (o == null) o = {};\n var sfmt = \"\";\n\n switch (typeof fmt) {\n case \"string\":\n if (fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;else sfmt = fmt;\n break;\n\n case \"number\":\n if (fmt == 14 && o.dateNF) sfmt = o.dateNF;else sfmt = (o.table != null ? o.table : table_fmt)[fmt];\n if (sfmt == null) sfmt = o.table && o.table[default_map[fmt]] || table_fmt[default_map[fmt]];\n if (sfmt == null) sfmt = default_str[fmt] || \"General\";\n break;\n }\n\n if (isgeneral(sfmt, 0)) return general_fmt(v, o);\n if (v instanceof Date) v = datenum_local(v, o.date1904);\n var f = choose_fmt(sfmt, v);\n if (isgeneral(f[1])) return general_fmt(v, o);\n if (v === true) v = \"TRUE\";else if (v === false) v = \"FALSE\";else if (v === \"\" || v == null) return \"\";\n return eval_fmt(f[1], v, o, f[0]);\n }\n\n function load_entry(fmt, idx) {\n if (typeof idx != 'number') {\n idx = +idx || -1;\n\n for (var i = 0; i < 0x0188; ++i) {\n if (table_fmt[i] == undefined) {\n if (idx < 0) idx = i;\n continue;\n }\n\n if (table_fmt[i] == fmt) {\n idx = i;\n break;\n }\n }\n\n if (idx < 0) idx = 0x187;\n }\n\n table_fmt[idx] = fmt;\n return idx;\n }\n\n SSF.load = load_entry;\n SSF._table = table_fmt;\n\n SSF.get_table = function get_table() {\n return table_fmt;\n };\n\n SSF.load_table = function load_table(tbl) {\n for (var i = 0; i != 0x0188; ++i) {\n if (tbl[i] !== undefined) load_entry(tbl[i], i);\n }\n };\n\n SSF.init_table = init_table;\n SSF.format = format;\n };\n\n make_ssf(SSF);\n /* map from xlml named formats to SSF TODO: localize */\n\n var XLMLFormatMap\n /*{[string]:string}*/\n = {\n \"General Number\": \"General\",\n \"General Date\": SSF._table[22],\n \"Long Date\": \"dddd, mmmm dd, yyyy\",\n \"Medium Date\": SSF._table[15],\n \"Short Date\": SSF._table[14],\n \"Long Time\": SSF._table[19],\n \"Medium Time\": SSF._table[18],\n \"Short Time\": SSF._table[20],\n \"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"Fixed\": SSF._table[2],\n \"Standard\": SSF._table[4],\n \"Percent\": SSF._table[10],\n \"Scientific\": SSF._table[11],\n \"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n \"True/False\": '\"True\";\"True\";\"False\";@',\n \"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n };\n var SSFImplicit\n /*{[number]:string}*/\n = {\n \"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"23\": 'General',\n \"24\": 'General',\n \"25\": 'General',\n \"26\": 'General',\n \"27\": 'm/d/yy',\n \"28\": 'm/d/yy',\n \"29\": 'm/d/yy',\n \"30\": 'm/d/yy',\n \"31\": 'm/d/yy',\n \"32\": 'h:mm:ss',\n \"33\": 'h:mm:ss',\n \"34\": 'h:mm:ss',\n \"35\": 'h:mm:ss',\n \"36\": 'm/d/yy',\n \"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n \"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n \"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n \"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n \"50\": 'm/d/yy',\n \"51\": 'm/d/yy',\n \"52\": 'm/d/yy',\n \"53\": 'm/d/yy',\n \"54\": 'm/d/yy',\n \"55\": 'm/d/yy',\n \"56\": 'm/d/yy',\n \"57\": 'm/d/yy',\n \"58\": 'm/d/yy',\n \"59\": '0',\n \"60\": '0.00',\n \"61\": '#,##0',\n \"62\": '#,##0.00',\n \"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"67\": '0%',\n \"68\": '0.00%',\n \"69\": '# ?/?',\n \"70\": '# ??/??',\n \"71\": 'm/d/yy',\n \"72\": 'm/d/yy',\n \"73\": 'd-mmm-yy',\n \"74\": 'd-mmm',\n \"75\": 'mmm-yy',\n \"76\": 'h:mm',\n \"77\": 'h:mm:ss',\n \"78\": 'm/d/yy h:mm',\n \"79\": 'mm:ss',\n \"80\": '[h]:mm:ss',\n \"81\": 'mmss.0'\n };\n /* dateNF parse TODO: move to SSF */\n\n var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\n\n function dateNF_regex(dateNF) {\n var fmt = typeof dateNF == \"number\" ? SSF._table[dateNF] : dateNF;\n fmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n return new RegExp(\"^\" + fmt + \"$\");\n }\n\n function dateNF_fix(str, dateNF, match) {\n var Y = -1,\n m = -1,\n d = -1,\n H = -1,\n M = -1,\n S = -1;\n (dateNF.match(dateNFregex) || []).forEach(function (n, i) {\n var v = parseInt(match[i + 1], 10);\n\n switch (n.toLowerCase().charAt(0)) {\n case 'y':\n Y = v;\n break;\n\n case 'd':\n d = v;\n break;\n\n case 'h':\n H = v;\n break;\n\n case 's':\n S = v;\n break;\n\n case 'm':\n if (H >= 0) M = v;else m = v;\n break;\n }\n });\n\n if (S >= 0 && M == -1 && m >= 0) {\n M = m;\n m = -1;\n }\n\n var datestr = (\"\" + (Y >= 0 ? Y : new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m >= 1 ? m : 1)).slice(-2) + \"-\" + (\"00\" + (d >= 1 ? d : 1)).slice(-2);\n if (datestr.length == 7) datestr = \"0\" + datestr;\n if (datestr.length == 8) datestr = \"20\" + datestr;\n var timestr = (\"00\" + (H >= 0 ? H : 0)).slice(-2) + \":\" + (\"00\" + (M >= 0 ? M : 0)).slice(-2) + \":\" + (\"00\" + (S >= 0 ? S : 0)).slice(-2);\n if (H == -1 && M == -1 && S == -1) return datestr;\n if (Y == -1 && m == -1 && d == -1) return timestr;\n return datestr + \"T\" + timestr;\n }\n\n var DO_NOT_EXPORT_CFB = true;\n /* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n /* vim: set ts=2: */\n\n /*jshint eqnull:true */\n\n /*exported CFB */\n\n /*global Uint8Array:false, Uint16Array:false */\n\n /* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n\n /* vim: set ts=2: */\n\n /*exported CRC32 */\n\n var CRC32;\n\n (function (factory) {\n /*jshint ignore:start */\n\n /*eslint-disable */\n factory(CRC32 = {});\n /*eslint-enable */\n\n /*jshint ignore:end */\n })(function (CRC32) {\n CRC32.version = '1.2.0';\n /* see perf/crc32table.js */\n\n /*global Int32Array */\n\n function signed_crc_table() {\n var c = 0,\n table = new Array(256);\n\n for (var n = 0; n != 256; ++n) {\n c = n;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n table[n] = c;\n }\n\n return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n }\n\n var T = signed_crc_table();\n\n function crc32_bstr(bstr, seed) {\n var C = seed ^ -1,\n L = bstr.length - 1;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n }\n\n if (i === L) C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i)) & 0xFF];\n return C ^ -1;\n }\n\n function crc32_buf(buf, seed) {\n if (buf.length > 10000) return crc32_buf_8(buf, seed);\n var C = seed ^ -1,\n L = buf.length - 3;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n while (i < L + 3) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n return C ^ -1;\n }\n\n function crc32_buf_8(buf, seed) {\n var C = seed ^ -1,\n L = buf.length - 7;\n\n for (var i = 0; i < L;) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n while (i < L + 7) {\n C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n }\n\n return C ^ -1;\n }\n\n function crc32_str(str, seed) {\n var C = seed ^ -1;\n\n for (var i = 0, L = str.length, c, d; i < L;) {\n c = str.charCodeAt(i++);\n\n if (c < 0x80) {\n C = C >>> 8 ^ T[(C ^ c) & 0xFF];\n } else if (c < 0x800) {\n C = C >>> 8 ^ T[(C ^ (192 | c >> 6 & 31)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n } else if (c >= 0xD800 && c < 0xE000) {\n c = (c & 1023) + 64;\n d = str.charCodeAt(i++) & 1023;\n C = C >>> 8 ^ T[(C ^ (240 | c >> 8 & 7)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c >> 2 & 63)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | d & 63)) & 0xFF];\n } else {\n C = C >>> 8 ^ T[(C ^ (224 | c >> 12 & 15)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c >> 6 & 63)) & 0xFF];\n C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n }\n }\n\n return C ^ -1;\n }\n\n CRC32.table = T;\n CRC32.bstr = crc32_bstr;\n CRC32.buf = crc32_buf;\n CRC32.str = crc32_str;\n });\n /* [MS-CFB] v20171201 */\n\n\n var CFB = function _CFB() {\n var exports = {};\n exports.version = '1.1.4';\n /* [MS-CFB] 2.6.4 */\n\n function namecmp(l, r) {\n var L = l.split(\"/\"),\n R = r.split(\"/\");\n\n for (var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n if (c = L[i].length - R[i].length) return c;\n if (L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n }\n\n return L.length - R.length;\n }\n\n function dirname(p) {\n if (p.charAt(p.length - 1) == \"/\") return p.slice(0, -1).indexOf(\"/\") === -1 ? p : dirname(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(0, c + 1);\n }\n\n function filename(p) {\n if (p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(c + 1);\n }\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 */\n\n\n function write_dos_date(buf, date) {\n if (typeof date === \"string\") date = new Date(date);\n var hms = date.getHours();\n hms = hms << 6 | date.getMinutes();\n hms = hms << 5 | date.getSeconds() >>> 1;\n buf.write_shift(2, hms);\n var ymd = date.getFullYear() - 1980;\n ymd = ymd << 4 | date.getMonth() + 1;\n ymd = ymd << 5 | date.getDate();\n buf.write_shift(2, ymd);\n }\n /* read four bytes from buf and interpret as a DOS date */\n\n\n function parse_dos_date(buf) {\n var hms = buf.read_shift(2) & 0xFFFF;\n var ymd = buf.read_shift(2) & 0xFFFF;\n var val = new Date();\n var d = ymd & 0x1F;\n ymd >>>= 5;\n var m = ymd & 0x0F;\n ymd >>>= 4;\n val.setMilliseconds(0);\n val.setFullYear(ymd + 1980);\n val.setMonth(m - 1);\n val.setDate(d);\n var S = hms & 0x1F;\n hms >>>= 5;\n var M = hms & 0x3F;\n hms >>>= 6;\n val.setHours(hms);\n val.setMinutes(M);\n val.setSeconds(S << 1);\n return val;\n }\n\n function parse_extra_field(blob) {\n prep_blob(blob, 0);\n var o = {};\n var flags = 0;\n\n while (blob.l <= blob.length - 4) {\n var type = blob.read_shift(2);\n var sz = blob.read_shift(2),\n tgt = blob.l + sz;\n var p = {};\n\n switch (type) {\n /* UNIX-style Timestamps */\n case 0x5455:\n {\n flags = blob.read_shift(1);\n if (flags & 1) p.mtime = blob.read_shift(4);\n /* for some reason, CD flag corresponds to LFH */\n\n if (sz > 5) {\n if (flags & 2) p.atime = blob.read_shift(4);\n if (flags & 4) p.ctime = blob.read_shift(4);\n }\n\n if (p.mtime) p.mt = new Date(p.mtime * 1000);\n }\n break;\n }\n\n blob.l = tgt;\n o[type] = p;\n }\n\n return o;\n }\n\n var fs;\n\n function get_fs() {\n return fs || (fs = require('fs'));\n }\n\n function parse(file, options) {\n if (file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\n if (file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\n var mver = 3;\n var ssz = 512;\n var nmfs = 0; // number of mini FAT sectors\n\n var difat_sec_cnt = 0;\n var dir_start = 0;\n var minifat_start = 0;\n var difat_start = 0;\n var fat_addrs = []; // locations of FAT sectors\n\n /* [MS-CFB] 2.2 Compound File Header */\n\n var blob = file.slice(0, 512);\n prep_blob(blob, 0);\n /* major version */\n\n var mv = check_get_mver(blob);\n mver = mv[0];\n\n switch (mver) {\n case 3:\n ssz = 512;\n break;\n\n case 4:\n ssz = 4096;\n break;\n\n case 0:\n if (mv[1] == 0) return parse_zip(file, options);\n\n /* falls through */\n\n default:\n throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n }\n /* reprocess header */\n\n\n if (ssz !== 512) {\n blob = file.slice(0, ssz);\n prep_blob(blob, 28\n /* blob.l */\n );\n }\n /* Save header for final object */\n\n\n var header = file.slice(0, ssz);\n check_shifts(blob, mver); // Number of Directory Sectors\n\n var dir_cnt = blob.read_shift(4, 'i');\n if (mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors\n\n blob.l += 4; // First Directory Sector Location\n\n dir_start = blob.read_shift(4, 'i'); // Transaction Signature\n\n blob.l += 4; // Mini Stream Cutoff Size\n\n blob.chk('00100000', 'Mini Stream Cutoff Size: '); // First Mini FAT Sector Location\n\n minifat_start = blob.read_shift(4, 'i'); // Number of Mini FAT Sectors\n\n nmfs = blob.read_shift(4, 'i'); // First DIFAT sector location\n\n difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors\n\n difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations\n\n for (var q = -1, j = 0; j < 109; ++j) {\n /* 109 = (512 - blob.l)>>>2; */\n q = blob.read_shift(4, 'i');\n if (q < 0) break;\n fat_addrs[j] = q;\n }\n /** Break the file up into sectors */\n\n\n var sectors = sectorify(file, ssz);\n sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n /** Chains */\n\n var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n sector_list[dir_start].name = \"!Directory\";\n if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\n sector_list[fat_addrs[0]].name = \"!FAT\";\n sector_list.fat_addrs = fat_addrs;\n sector_list.ssz = ssz;\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n var files = {},\n Paths = [],\n FileIndex = [],\n FullPaths = [];\n read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n build_full_paths(FileIndex, FullPaths, Paths);\n Paths.shift();\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n }; // $FlowIgnore\n\n if (options && options.raw) o.raw = {\n header: header,\n sectors: sectors\n };\n return o;\n } // parse\n\n /* [MS-CFB] 2.2 Compound File Header -- read up to major version */\n\n\n function check_get_mver(blob) {\n if (blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8\n\n blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16\n //blob.chk(HEADER_CLSID, 'CLSID: ');\n\n blob.l += 16; // minor version 2\n\n var mver = blob.read_shift(2, 'u');\n return [blob.read_shift(2, 'u'), mver];\n }\n\n function check_shifts(blob, mver) {\n var shift = 0x09; // Byte Order\n //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\n blob.l += 2; // Sector Shift\n\n switch (shift = blob.read_shift(2)) {\n case 0x09:\n if (mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift);\n break;\n\n case 0x0c:\n if (mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift);\n break;\n\n default:\n throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n } // Mini Sector Shift\n\n\n blob.chk('0600', 'Mini Sector Shift: '); // Reserved\n\n blob.chk('000000000000', 'Reserved: ');\n }\n /** Break the file up into sectors */\n\n\n function sectorify(file, ssz) {\n var nsectors = Math.ceil(file.length / ssz) - 1;\n var sectors = [];\n\n for (var i = 1; i < nsectors; ++i) {\n sectors[i - 1] = file.slice(i * ssz, (i + 1) * ssz);\n }\n\n sectors[nsectors - 1] = file.slice(nsectors * ssz);\n return sectors;\n }\n /* [MS-CFB] 2.6.4 Red-Black Tree */\n\n\n function build_full_paths(FI, FP, Paths) {\n var i = 0,\n L = 0,\n R = 0,\n C = 0,\n j = 0,\n pl = Paths.length;\n var dad = [],\n q = [];\n\n for (; i < pl; ++i) {\n dad[i] = q[i] = i;\n FP[i] = Paths[i];\n }\n\n for (; j < q.length; ++j) {\n i = q[j];\n L = FI[i].L;\n R = FI[i].R;\n C = FI[i].C;\n\n if (dad[i] === i) {\n if (L !== -1\n /*NOSTREAM*/\n && dad[L] !== L) dad[i] = dad[L];\n if (R !== -1 && dad[R] !== R) dad[i] = dad[R];\n }\n\n if (C !== -1\n /*NOSTREAM*/\n ) dad[C] = i;\n\n if (L !== -1 && i != dad[i]) {\n dad[L] = dad[i];\n if (q.lastIndexOf(L) < j) q.push(L);\n }\n\n if (R !== -1 && i != dad[i]) {\n dad[R] = dad[i];\n if (q.lastIndexOf(R) < j) q.push(R);\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (dad[i] === i) {\n if (R !== -1\n /*NOSTREAM*/\n && dad[R] !== R) dad[i] = dad[R];else if (L !== -1 && dad[L] !== L) dad[i] = dad[L];\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type === 0\n /* unknown */\n ) continue;\n j = i;\n if (j != dad[j]) do {\n j = dad[j];\n FP[i] = FP[j] + \"/\" + FP[i];\n } while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n dad[i] = -1;\n }\n\n FP[0] += \"/\";\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type !== 2\n /* stream */\n ) FP[i] += \"/\";\n }\n }\n\n function get_mfat_entry(entry, payload, mini) {\n var start = entry.start,\n size = entry.size; //return (payload.slice(start*MSSZ, start*MSSZ + size));\n\n var o = [];\n var idx = start;\n\n while (mini && size > 0 && idx >= 0) {\n o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n size -= MSSZ;\n idx = __readInt32LE(mini, idx * 4);\n }\n\n if (o.length === 0) return new_buf(0);\n return bconcat(o).slice(0, entry.size);\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 */\n\n\n function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n var q = ENDOFCHAIN;\n\n if (idx === ENDOFCHAIN) {\n if (cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n } else if (idx !== -1\n /*FREESECT*/\n ) {\n var sector = sectors[idx],\n m = (ssz >>> 2) - 1;\n if (!sector) return;\n\n for (var i = 0; i < m; ++i) {\n if ((q = __readInt32LE(sector, i * 4)) === ENDOFCHAIN) break;\n fat_addrs.push(q);\n }\n\n sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);\n }\n }\n /** Follow the linked list of sectors for a given starting point */\n\n\n function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n var buf = [],\n buf_chain = [];\n if (!chkd) chkd = [];\n var modulus = ssz - 1,\n j = 0,\n jj = 0;\n\n for (j = start; j >= 0;) {\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n }\n\n return {\n nodes: buf,\n data: __toBuffer([buf_chain])\n };\n }\n /** Chase down the sector linked lists */\n\n\n function make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n var sl = sectors.length,\n sector_list = [];\n var chkd = [],\n buf = [],\n buf_chain = [];\n var modulus = ssz - 1,\n i = 0,\n j = 0,\n k = 0,\n jj = 0;\n\n for (i = 0; i < sl; ++i) {\n buf = [];\n k = i + dir_start;\n if (k >= sl) k -= sl;\n if (chkd[k]) continue;\n buf_chain = [];\n var seen = [];\n\n for (j = k; j >= 0;) {\n seen[j] = true;\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n if (seen[j]) break;\n }\n\n sector_list[k] = {\n nodes: buf,\n data: __toBuffer([buf_chain])\n };\n }\n\n return sector_list;\n }\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n\n function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n var minifat_store = 0,\n pl = Paths.length ? 2 : 0;\n var sector = sector_list[dir_start].data;\n var i = 0,\n namelen = 0,\n name;\n\n for (; i < sector.length; i += 128) {\n var blob = sector.slice(i, i + 128);\n prep_blob(blob, 64);\n namelen = blob.read_shift(2);\n name = __utf16le(blob, 0, namelen - pl);\n Paths.push(name);\n var o = {\n name: name,\n type: blob.read_shift(1),\n color: blob.read_shift(1),\n L: blob.read_shift(4, 'i'),\n R: blob.read_shift(4, 'i'),\n C: blob.read_shift(4, 'i'),\n clsid: blob.read_shift(16),\n state: blob.read_shift(4, 'i'),\n start: 0,\n size: 0\n };\n var ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);\n var mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);\n o.start = blob.read_shift(4, 'i');\n o.size = blob.read_shift(4, 'i');\n\n if (o.size < 0 && o.start < 0) {\n o.size = o.type = 0;\n o.start = ENDOFCHAIN;\n o.name = \"\";\n }\n\n if (o.type === 5) {\n /* root */\n minifat_store = o.start;\n if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n /*minifat_size = o.size;*/\n } else if (o.size >= 4096\n /* MSCSZ */\n ) {\n o.storage = 'fat';\n if (sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n sector_list[o.start].name = o.name;\n o.content = sector_list[o.start].data.slice(0, o.size);\n } else {\n o.storage = 'minifat';\n if (o.size < 0) o.size = 0;else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);\n }\n }\n\n if (o.content) prep_blob(o.content, 0);\n files[name] = o;\n FileIndex.push(o);\n }\n }\n\n function read_date(blob, offset) {\n return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1000);\n }\n\n function read_file(filename, options) {\n get_fs();\n return parse(fs.readFileSync(filename), options);\n }\n\n function read(blob, options) {\n switch (options && options.type || \"base64\") {\n case \"file\":\n return read_file(blob, options);\n\n case \"base64\":\n return parse(s2a(Base64.decode(blob)), options);\n\n case \"binary\":\n return parse(s2a(blob), options);\n }\n\n return parse(blob, options);\n }\n\n function init_cfb(cfb, opts) {\n var o = opts || {},\n root = o.root || \"Root Entry\";\n if (!cfb.FullPaths) cfb.FullPaths = [];\n if (!cfb.FileIndex) cfb.FileIndex = [];\n if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\n if (cfb.FullPaths.length === 0) {\n cfb.FullPaths[0] = root + \"/\";\n cfb.FileIndex[0] = {\n name: root,\n type: 5\n };\n }\n\n if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n seed_cfb(cfb);\n }\n\n function seed_cfb(cfb) {\n var nm = \"\\x01Sh33tJ5\";\n if (CFB.find(cfb, \"/\" + nm)) return;\n var p = new_buf(4);\n p[0] = 55;\n p[1] = p[3] = 50;\n p[2] = 54;\n cfb.FileIndex.push({\n name: nm,\n type: 2,\n content: p,\n size: 4,\n L: 69,\n R: 69,\n C: 69\n });\n cfb.FullPaths.push(cfb.FullPaths[0] + nm);\n rebuild_cfb(cfb);\n }\n\n function rebuild_cfb(cfb, f) {\n init_cfb(cfb);\n var gc = false,\n s = false;\n\n for (var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n var _file = cfb.FileIndex[i];\n\n switch (_file.type) {\n case 0:\n if (s) gc = true;else {\n cfb.FileIndex.pop();\n cfb.FullPaths.pop();\n }\n break;\n\n case 1:\n case 2:\n case 5:\n s = true;\n if (isNaN(_file.R * _file.L * _file.C)) gc = true;\n if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n break;\n\n default:\n gc = true;\n break;\n }\n }\n\n if (!gc && !f) return;\n var now = new Date(1987, 1, 19),\n j = 0;\n var data = [];\n\n for (i = 0; i < cfb.FullPaths.length; ++i) {\n if (cfb.FileIndex[i].type === 0) continue;\n data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n }\n\n for (i = 0; i < data.length; ++i) {\n var dad = dirname(data[i][0]);\n s = false;\n\n for (j = 0; j < data.length; ++j) {\n if (data[j][0] === dad) s = true;\n }\n\n if (!s) data.push([dad, {\n name: filename(dad).replace(\"/\", \"\"),\n type: 1,\n clsid: HEADER_CLSID,\n ct: now,\n mt: now,\n content: null\n }]);\n }\n\n data.sort(function (x, y) {\n return namecmp(x[0], y[0]);\n });\n cfb.FullPaths = [];\n cfb.FileIndex = [];\n\n for (i = 0; i < data.length; ++i) {\n cfb.FullPaths[i] = data[i][0];\n cfb.FileIndex[i] = data[i][1];\n }\n\n for (i = 0; i < data.length; ++i) {\n var elt = cfb.FileIndex[i];\n var nm = cfb.FullPaths[i];\n elt.name = filename(nm).replace(\"/\", \"\");\n elt.L = elt.R = elt.C = -(elt.color = 1);\n elt.size = elt.content ? elt.content.length : 0;\n elt.start = 0;\n elt.clsid = elt.clsid || HEADER_CLSID;\n\n if (i === 0) {\n elt.C = data.length > 1 ? 1 : -1;\n elt.size = 0;\n elt.type = 5;\n } else if (nm.slice(-1) == \"/\") {\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == nm) break;\n }\n\n elt.C = j >= data.length ? -1 : j;\n\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;\n }\n\n elt.R = j >= data.length ? -1 : j;\n elt.type = 1;\n } else {\n if (dirname(cfb.FullPaths[i + 1] || \"\") == dirname(nm)) elt.R = i + 1;\n elt.type = 2;\n }\n }\n }\n\n function _write(cfb, options) {\n var _opts = options || {};\n\n rebuild_cfb(cfb);\n if (_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\n var L = function (cfb) {\n var mini_size = 0,\n fat_size = 0;\n\n for (var i = 0; i < cfb.FileIndex.length; ++i) {\n var file = cfb.FileIndex[i];\n if (!file.content) continue;\n var flen = file.content.length;\n\n if (flen > 0) {\n if (flen < 0x1000) mini_size += flen + 0x3F >> 6;else fat_size += flen + 0x01FF >> 9;\n }\n }\n\n var dir_cnt = cfb.FullPaths.length + 3 >> 2;\n var mini_cnt = mini_size + 7 >> 3;\n var mfat_cnt = mini_size + 0x7F >> 7;\n var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n var fat_cnt = fat_base + 0x7F >> 7;\n var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n\n while (fat_base + fat_cnt + difat_cnt + 0x7F >> 7 > fat_cnt) {\n difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n }\n\n var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n cfb.FileIndex[0].size = mini_size << 6;\n L[7] = (cfb.FileIndex[0].start = L[0] + L[1] + L[2] + L[3] + L[4] + L[5]) + (L[6] + 7 >> 3);\n return L;\n }(cfb);\n\n var o = new_buf(L[7] << 9);\n var i = 0,\n T = 0;\n {\n for (i = 0; i < 8; ++i) {\n o.write_shift(1, HEADER_SIG[i]);\n }\n\n for (i = 0; i < 8; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(2, 0x003E);\n o.write_shift(2, 0x0003);\n o.write_shift(2, 0xFFFE);\n o.write_shift(2, 0x0009);\n o.write_shift(2, 0x0006);\n\n for (i = 0; i < 3; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(4, 0);\n o.write_shift(4, L[2]);\n o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n o.write_shift(4, 0);\n o.write_shift(4, 1 << 12);\n o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[3]);\n o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[1]);\n\n for (i = 0; i < 109; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n }\n\n if (L[1]) {\n for (T = 0; T < L[1]; ++T) {\n for (; i < 236 + T * 127; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n\n o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n }\n }\n\n var chainit = function chainit(w) {\n for (T += w; i < T - 1; ++i) {\n o.write_shift(-4, i + 1);\n }\n\n if (w) {\n ++i;\n o.write_shift(-4, ENDOFCHAIN);\n }\n };\n\n T = i = 0;\n\n for (T += L[1]; i < T; ++i) {\n o.write_shift(-4, consts.DIFSECT);\n }\n\n for (T += L[2]; i < T; ++i) {\n o.write_shift(-4, consts.FATSECT);\n }\n\n chainit(L[3]);\n chainit(L[4]);\n var j = 0,\n flen = 0;\n var file = cfb.FileIndex[0];\n\n for (; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n flen = file.content.length;\n if (flen < 0x1000) continue;\n file.start = T;\n chainit(flen + 0x01FF >> 9);\n }\n\n chainit(L[6] + 7 >> 3);\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n T = i = 0;\n\n for (j = 0; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n flen = file.content.length;\n if (!flen || flen >= 0x1000) continue;\n file.start = T;\n chainit(flen + 0x3F >> 6);\n }\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n for (i = 0; i < L[4] << 2; ++i) {\n var nm = cfb.FullPaths[i];\n\n if (!nm || nm.length === 0) {\n for (j = 0; j < 17; ++j) {\n o.write_shift(4, 0);\n }\n\n for (j = 0; j < 3; ++j) {\n o.write_shift(4, -1);\n }\n\n for (j = 0; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n\n continue;\n }\n\n file = cfb.FileIndex[i];\n if (i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\n var _nm = i === 0 && _opts.root || file.name;\n\n flen = 2 * (_nm.length + 1);\n o.write_shift(64, _nm, \"utf16le\");\n o.write_shift(2, flen);\n o.write_shift(1, file.type);\n o.write_shift(1, file.color);\n o.write_shift(-4, file.L);\n o.write_shift(-4, file.R);\n o.write_shift(-4, file.C);\n if (!file.clsid) for (j = 0; j < 4; ++j) {\n o.write_shift(4, 0);\n } else o.write_shift(16, file.clsid, \"hex\");\n o.write_shift(4, file.state || 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, file.start);\n o.write_shift(4, file.size);\n o.write_shift(4, 0);\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n\n if (file.size >= 0x1000) {\n o.l = file.start + 1 << 9;\n\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x1FF; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n\n if (file.size > 0 && file.size < 0x1000) {\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x3F; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n\n while (o.l < o.length) {\n o.write_shift(1, 0);\n }\n\n return o;\n }\n /* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\n\n\n function find(cfb, path) {\n var UCFullPaths = cfb.FullPaths.map(function (x) {\n return x.toUpperCase();\n });\n var UCPaths = UCFullPaths.map(function (x) {\n var y = x.split(\"/\");\n return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)];\n });\n var k = false;\n\n if (path.charCodeAt(0) === 47\n /* \"/\" */\n ) {\n k = true;\n path = UCFullPaths[0].slice(0, -1) + path;\n } else k = path.indexOf(\"/\") !== -1;\n\n var UCPath = path.toUpperCase();\n var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n if (w !== -1) return cfb.FileIndex[w];\n var m = !UCPath.match(chr1);\n UCPath = UCPath.replace(chr0, '');\n if (m) UCPath = UCPath.replace(chr1, '!');\n\n for (w = 0; w < UCFullPaths.length; ++w) {\n if ((m ? UCFullPaths[w].replace(chr1, '!') : UCFullPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n if ((m ? UCPaths[w].replace(chr1, '!') : UCPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n }\n\n return null;\n }\n /** CFB Constants */\n\n\n var MSSZ = 64;\n /* Mini Sector Size = 1<<6 */\n //var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n\n /* 2.1 Compound File Sector Numbers and Types */\n\n var ENDOFCHAIN = -2;\n /* 2.2 Compound File Header */\n\n var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\n var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\n var HEADER_CLSID = '00000000000000000000000000000000';\n var consts = {\n /* 2.1 Compund File Sector Numbers and Types */\n MAXREGSECT: -6,\n DIFSECT: -4,\n FATSECT: -3,\n ENDOFCHAIN: ENDOFCHAIN,\n FREESECT: -1,\n\n /* 2.2 Compound File Header */\n HEADER_SIGNATURE: HEADER_SIGNATURE,\n HEADER_MINOR_VERSION: '3e00',\n MAXREGSID: -6,\n NOSTREAM: -1,\n HEADER_CLSID: HEADER_CLSID,\n\n /* 2.6.1 Compound File Directory Entry */\n EntryTypes: ['unknown', 'storage', 'stream', 'lockbytes', 'property', 'root']\n };\n\n function write_file(cfb, filename, options) {\n get_fs();\n\n var o = _write(cfb, options);\n\n fs.writeFileSync(filename, o);\n }\n\n function a2s(o) {\n var out = new Array(o.length);\n\n for (var i = 0; i < o.length; ++i) {\n out[i] = String.fromCharCode(o[i]);\n }\n\n return out.join(\"\");\n }\n\n function write(cfb, options) {\n var o = _write(cfb, options);\n\n switch (options && options.type) {\n case \"file\":\n get_fs();\n fs.writeFileSync(options.filename, o);\n return o;\n\n case \"binary\":\n return a2s(o);\n\n case \"base64\":\n return Base64.encode(a2s(o));\n }\n\n return o;\n }\n /* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\n\n\n var _zlib;\n\n function use_zlib(zlib) {\n try {\n var InflateRaw = zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\n if (InflRaw.bytesRead) _zlib = zlib;else throw new Error(\"zlib does not expose bytesRead\");\n } catch (e) {\n console.error(\"cannot use native zlib: \" + (e.message || e));\n }\n }\n\n function _inflateRawSync(payload, usz) {\n if (!_zlib) return _inflate(payload, usz);\n var InflateRaw = _zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\n payload.l += InflRaw.bytesRead;\n return out;\n }\n\n function _deflateRawSync(payload) {\n return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n }\n\n var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\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 ]; */\n\n var 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 /* 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 ]; */\n\n var 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\n function bit_swap_8(n) {\n var t = (n << 1 | n << 11) & 0x22110 | (n << 5 | n << 15) & 0x88440;\n return (t >> 16 | t >> 8 | t) & 0xFF;\n }\n\n var use_typed_arrays = typeof Uint8Array !== 'undefined';\n var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];\n\n for (var q = 0; q < 1 << 8; ++q) {\n bitswap8[q] = bit_swap_8(q);\n }\n\n function bit_swap_n(n, b) {\n var rev = bitswap8[n & 0xFF];\n if (b <= 8) return rev >>> 8 - b;\n rev = rev << 8 | bitswap8[n >> 8 & 0xFF];\n if (b <= 16) return rev >>> 16 - b;\n rev = rev << 8 | bitswap8[n >> 16 & 0xFF];\n return rev >>> 24 - b;\n }\n /* helpers for unaligned bit reads */\n\n\n function read_bits_2(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 0x03;\n }\n\n function read_bits_3(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 0x07;\n }\n\n function read_bits_4(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 0x0F;\n }\n\n function read_bits_5(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 0x1F;\n }\n\n function read_bits_7(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 0x7F;\n }\n /* works up to n = 3 * 8 + 1 = 25 */\n\n\n function read_bits_n(buf, bl, n) {\n var w = bl & 7,\n h = bl >>> 3,\n f = (1 << n) - 1;\n var v = buf[h] >>> w;\n if (n < 8 - w) return v & f;\n v |= buf[h + 1] << 8 - w;\n if (n < 16 - w) return v & f;\n v |= buf[h + 2] << 16 - w;\n if (n < 24 - w) return v & f;\n v |= buf[h + 3] << 24 - w;\n return v & f;\n }\n /* until ArrayBuffer#realloc is a thing, fake a realloc */\n\n\n function realloc(b, sz) {\n var L = b.length,\n M = 2 * L > sz ? 2 * L : sz + 5,\n i = 0;\n if (L >= sz) return b;\n\n if (has_buf) {\n var o = new_unsafe_buf(M); // $FlowIgnore\n\n if (b.copy) b.copy(o);else for (; i < b.length; ++i) {\n o[i] = b[i];\n }\n return o;\n } else if (use_typed_arrays) {\n var a = new Uint8Array(M);\n if (a.set) a.set(b);else for (; i < b.length; ++i) {\n a[i] = b[i];\n }\n return a;\n }\n\n b.length = M;\n return b;\n }\n /* zero-filled arrays for older browsers */\n\n\n function zero_fill_array(n) {\n var o = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n o[i] = 0;\n }\n\n return o;\n }\n\n var _deflate = function () {\n var _deflateRaw = function () {\n return function deflateRaw(data, out) {\n var boff = 0;\n\n while (boff < data.length) {\n var L = Math.min(0xFFFF, data.length - boff);\n var h = boff + L == data.length;\n /* TODO: this is only type 0 stored */\n\n out.write_shift(1, +h);\n out.write_shift(2, L);\n out.write_shift(2, ~L & 0xFFFF);\n\n while (L-- > 0) {\n out[out.l++] = data[boff++];\n }\n }\n\n return out.l;\n };\n }();\n\n return function (data) {\n var buf = new_buf(50 + Math.floor(data.length * 1.1));\n\n var off = _deflateRaw(data, buf);\n\n return buf.slice(0, off);\n };\n }();\n /* modified inflate function also moves original read head */\n\n /* build tree (used for literals and lengths) */\n\n\n function build_tree(clens, cmap, MAX) {\n var maxlen = 1,\n w = 0,\n i = 0,\n j = 0,\n ccode = 0,\n L = clens.length;\n var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n for (i = 0; i < 32; ++i) {\n bl_count[i] = 0;\n }\n\n for (i = L; i < MAX; ++i) {\n clens[i] = 0;\n }\n\n L = clens.length;\n var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n /* build code tree */\n\n for (i = 0; i < L; ++i) {\n bl_count[w = clens[i]]++;\n if (maxlen < w) maxlen = w;\n ctree[i] = 0;\n }\n\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n bl_count[i + 16] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n ccode = clens[i];\n if (ccode != 0) ctree[i] = bl_count[ccode + 16]++;\n }\n /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bit_swap_n(ctree[i], maxlen) >> maxlen - cleni;\n\n for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j) {\n cmap[ccode | j << cleni] = cleni & 15 | i << 4;\n }\n }\n }\n\n return maxlen;\n }\n\n var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\n var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n if (!use_typed_arrays) {\n for (var i = 0; i < 512; ++i) {\n fix_lmap[i] = 0;\n }\n\n for (i = 0; i < 32; ++i) {\n fix_dmap[i] = 0;\n }\n }\n\n (function () {\n var dlens = [];\n var i = 0;\n\n for (; i < 32; i++) {\n dlens.push(5);\n }\n\n build_tree(dlens, fix_dmap, 32);\n var clens = [];\n i = 0;\n\n for (; i <= 143; i++) {\n clens.push(8);\n }\n\n for (; i <= 255; i++) {\n clens.push(9);\n }\n\n for (; i <= 279; i++) {\n clens.push(7);\n }\n\n for (; i <= 287; i++) {\n clens.push(8);\n }\n\n build_tree(clens, fix_lmap, 288);\n })();\n\n var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\n var dyn_len_1 = 1,\n dyn_len_2 = 1;\n /* 5.5.3 Expanding Huffman Codes */\n\n function dyn(data, boff) {\n /* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n var _HLIT = read_bits_5(data, boff) + 257;\n\n boff += 5;\n\n var _HDIST = read_bits_5(data, boff) + 1;\n\n boff += 5;\n\n var _HCLEN = read_bits_4(data, boff) + 4;\n\n boff += 4;\n var w = 0;\n /* grab and store code lengths */\n\n var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var maxlen = 1;\n var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var L = clens.length;\n /* 19 */\n\n for (var i = 0; i < _HCLEN; ++i) {\n clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n if (maxlen < w) maxlen = w;\n bl_count[w]++;\n boff += 3;\n }\n /* build code tree */\n\n\n var ccode = 0;\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n next_code[i] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n if ((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n }\n /* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bitswap8[ctree[i]] >> 8 - cleni;\n\n for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) {\n dyn_cmap[ccode | j << cleni] = cleni & 7 | i << 3;\n }\n }\n }\n /* read literal and dist codes at once */\n\n\n var hcodes = [];\n maxlen = 1;\n\n for (; hcodes.length < _HLIT + _HDIST;) {\n ccode = dyn_cmap[read_bits_7(data, boff)];\n boff += ccode & 7;\n\n switch (ccode >>>= 3) {\n case 16:\n w = 3 + read_bits_2(data, boff);\n boff += 2;\n ccode = hcodes[hcodes.length - 1];\n\n while (w-- > 0) {\n hcodes.push(ccode);\n }\n\n break;\n\n case 17:\n w = 3 + read_bits_3(data, boff);\n boff += 3;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n case 18:\n w = 11 + read_bits_7(data, boff);\n boff += 7;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n default:\n hcodes.push(ccode);\n if (maxlen < ccode) maxlen = ccode;\n break;\n }\n }\n /* build literal / length trees */\n\n\n var h1 = hcodes.slice(0, _HLIT),\n h2 = hcodes.slice(_HLIT);\n\n for (i = _HLIT; i < 286; ++i) {\n h1[i] = 0;\n }\n\n for (i = _HDIST; i < 30; ++i) {\n h2[i] = 0;\n }\n\n dyn_len_1 = build_tree(h1, dyn_lmap, 286);\n dyn_len_2 = build_tree(h2, dyn_dmap, 30);\n return boff;\n }\n /* return [ data, bytesRead ] */\n\n\n function inflate(data, usz) {\n /* shortcircuit for empty buffer [0x03, 0x00] */\n if (data[0] == 3 && !(data[1] & 0x3)) {\n return [new_raw_buf(usz), 2];\n }\n /* bit offset */\n\n\n var boff = 0;\n /* header includes final bit and type bits */\n\n var header = 0;\n var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);\n var woff = 0;\n var OL = outbuf.length >>> 0;\n var max_len_1 = 0,\n max_len_2 = 0;\n\n while ((header & 1) == 0) {\n header = read_bits_3(data, boff);\n boff += 3;\n\n if (header >>> 1 == 0) {\n /* Stored block */\n if (boff & 7) boff += 8 - (boff & 7);\n /* 2 bytes sz, 2 bytes bit inverse */\n\n var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;\n boff += 32;\n /* push sz bytes */\n\n if (!usz && OL < woff + sz) {\n outbuf = realloc(outbuf, woff + sz);\n OL = outbuf.length;\n }\n\n if (typeof data.copy === 'function') {\n // $FlowIgnore\n data.copy(outbuf, woff, boff >>> 3, (boff >>> 3) + sz);\n woff += sz;\n boff += 8 * sz;\n } else while (sz-- > 0) {\n outbuf[woff++] = data[boff >>> 3];\n boff += 8;\n }\n\n continue;\n } else if (header >>> 1 == 1) {\n /* Fixed Huffman */\n max_len_1 = 9;\n max_len_2 = 5;\n } else {\n /* Dynamic Huffman */\n boff = dyn(data, boff);\n max_len_1 = dyn_len_1;\n max_len_2 = dyn_len_2;\n }\n\n if (!usz && OL < woff + 32767) {\n outbuf = realloc(outbuf, woff + 32767);\n OL = outbuf.length;\n }\n\n for (;;) {\n // while(true) is apparently out of vogue in modern JS circles\n\n /* ingest code and move read head */\n var bits = read_bits_n(data, boff, max_len_1);\n var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n boff += code & 15;\n code >>>= 4;\n /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\n if ((code >>> 8 & 0xFF) === 0) outbuf[woff++] = code;else if (code == 256) break;else {\n code -= 257;\n var len_eb = code < 8 ? 0 : code - 4 >> 2;\n if (len_eb > 5) len_eb = 0;\n var tgt = woff + LEN_LN[code];\n /* length extra bits */\n\n if (len_eb > 0) {\n tgt += read_bits_n(data, boff, len_eb);\n boff += len_eb;\n }\n /* dist code */\n\n\n bits = read_bits_n(data, boff, max_len_2);\n code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n boff += code & 15;\n code >>>= 4;\n var dst_eb = code < 4 ? 0 : code - 2 >> 1;\n var dst = DST_LN[code];\n /* dist extra bits */\n\n if (dst_eb > 0) {\n dst += read_bits_n(data, boff, dst_eb);\n boff += dst_eb;\n }\n /* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\n\n if (!usz && OL < tgt) {\n outbuf = realloc(outbuf, tgt);\n OL = outbuf.length;\n }\n\n while (woff < tgt) {\n outbuf[woff] = outbuf[woff - dst];\n ++woff;\n }\n }\n }\n }\n\n return [usz ? outbuf : outbuf.slice(0, woff), boff + 7 >>> 3];\n }\n\n function _inflate(payload, usz) {\n var data = payload.slice(payload.l || 0);\n var out = inflate(data, usz);\n payload.l += out[1];\n return out[0];\n }\n\n function warn_or_throw(wrn, msg) {\n if (wrn) {\n if (typeof console !== 'undefined') console.error(msg);\n } else throw new Error(msg);\n }\n\n function parse_zip(file, options) {\n var blob = file;\n prep_blob(blob, 0);\n var FileIndex = [],\n FullPaths = [];\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n };\n init_cfb(o, {\n root: options.root\n });\n /* find end of central directory, start just after signature */\n\n var i = blob.length - 4;\n\n while ((blob[i] != 0x50 || blob[i + 1] != 0x4b || blob[i + 2] != 0x05 || blob[i + 3] != 0x06) && i >= 0) {\n --i;\n }\n\n blob.l = i + 4;\n /* parse end of central directory */\n\n blob.l += 4;\n var fcnt = blob.read_shift(2);\n blob.l += 6;\n var start_cd = blob.read_shift(4);\n /* parse central directory */\n\n blob.l = start_cd;\n\n for (i = 0; i < fcnt; ++i) {\n /* trust local file header instead of CD entry */\n blob.l += 20;\n var csz = blob.read_shift(4);\n var usz = blob.read_shift(4);\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2);\n var fcsz = blob.read_shift(2);\n blob.l += 8;\n var offset = blob.read_shift(4);\n var EF = parse_extra_field(blob.slice(blob.l + namelen, blob.l + namelen + efsz));\n blob.l += namelen + efsz + fcsz;\n var L = blob.l;\n blob.l = offset + 4;\n parse_local_file(blob, csz, usz, o, EF);\n blob.l = L;\n }\n\n return o;\n }\n /* head starts just after local file header signature */\n\n\n function parse_local_file(blob, csz, usz, o, EF) {\n /* [local file header] */\n blob.l += 2;\n var flags = blob.read_shift(2);\n var meth = blob.read_shift(2);\n var date = parse_dos_date(blob);\n if (flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n var crc32 = blob.read_shift(4);\n\n var _csz = blob.read_shift(4);\n\n var _usz = blob.read_shift(4);\n\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2); // TODO: flags & (1<<11) // UTF8\n\n var name = \"\";\n\n for (var i = 0; i < namelen; ++i) {\n name += String.fromCharCode(blob[blob.l++]);\n }\n\n if (efsz) {\n var ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n if ((ef[0x5455] || {}).mt) date = ef[0x5455].mt;\n if (((EF || {})[0x5455] || {}).mt) date = EF[0x5455].mt;\n }\n\n blob.l += efsz;\n /* [encryption header] */\n\n /* [file data] */\n\n var data = blob.slice(blob.l, blob.l + _csz);\n\n switch (meth) {\n case 8:\n data = _inflateRawSync(blob, _usz);\n break;\n\n case 0:\n break;\n\n default:\n throw new Error(\"Unsupported ZIP Compression method \" + meth);\n }\n /* [data descriptor] */\n\n\n var wrn = false;\n\n if (flags & 8) {\n crc32 = blob.read_shift(4);\n\n if (crc32 == 0x08074b50) {\n crc32 = blob.read_shift(4);\n wrn = true;\n }\n\n _csz = blob.read_shift(4);\n _usz = blob.read_shift(4);\n }\n\n if (_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n if (_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\n var _crc32 = CRC32.buf(data, 0);\n\n if (crc32 >> 0 != _crc32 >> 0) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n cfb_add(o, name, data, {\n unsafe: true,\n mt: date\n });\n }\n\n function write_zip(cfb, options) {\n var _opts = options || {};\n\n var out = [],\n cdirs = [];\n var o = new_buf(1);\n var method = _opts.compression ? 8 : 0,\n flags = 0;\n var desc = false;\n if (desc) flags |= 8;\n var i = 0,\n j = 0;\n var start_cd = 0,\n fcnt = 0;\n var root = cfb.FullPaths[0],\n fp = root,\n fi = cfb.FileIndex[0];\n var crcs = [];\n var sz_cd = 0;\n\n for (i = 1; i < cfb.FullPaths.length; ++i) {\n fp = cfb.FullPaths[i].slice(root.length);\n fi = cfb.FileIndex[i];\n if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n var start = start_cd;\n /* TODO: CP437 filename */\n\n var namebuf = new_buf(fp.length);\n\n for (j = 0; j < fp.length; ++j) {\n namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n }\n\n namebuf = namebuf.slice(0, namebuf.l);\n crcs[fcnt] = CRC32.buf(fi.content, 0);\n var outbuf = fi.content;\n if (method == 8) outbuf = _deflateRawSync(outbuf);\n /* local file header */\n\n o = new_buf(30);\n o.write_shift(4, 0x04034b50);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n /* TODO: last mod file time/date */\n\n if (fi.mt) write_dos_date(o, fi.mt);else o.write_shift(4, 0);\n o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);\n o.write_shift(4, flags & 8 ? 0 : outbuf.length);\n o.write_shift(4, flags & 8 ? 0 : fi.content.length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n start_cd += o.length;\n out.push(o);\n start_cd += namebuf.length;\n out.push(namebuf);\n /* TODO: encryption header ? */\n\n start_cd += outbuf.length;\n out.push(outbuf);\n /* data descriptor */\n\n if (flags & 8) {\n o = new_buf(12);\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4, fi.content.length);\n start_cd += o.l;\n out.push(o);\n }\n /* central directory */\n\n\n o = new_buf(46);\n o.write_shift(4, 0x02014b50);\n o.write_shift(2, 0);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n o.write_shift(4, 0);\n /* TODO: last mod file time/date */\n\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4, fi.content.length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0);\n o.write_shift(4, start);\n sz_cd += o.l;\n cdirs.push(o);\n sz_cd += namebuf.length;\n cdirs.push(namebuf);\n ++fcnt;\n }\n /* end of central directory */\n\n\n o = new_buf(22);\n o.write_shift(4, 0x06054b50);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, fcnt);\n o.write_shift(2, fcnt);\n o.write_shift(4, sz_cd);\n o.write_shift(4, start_cd);\n o.write_shift(2, 0);\n return bconcat([bconcat(out), bconcat(cdirs), o]);\n }\n\n function cfb_new(opts) {\n var o = {};\n init_cfb(o, opts);\n return o;\n }\n\n function cfb_add(cfb, name, content, opts) {\n var unsafe = opts && opts.unsafe;\n if (!unsafe) init_cfb(cfb);\n var file = !unsafe && CFB.find(cfb, name);\n\n if (!file) {\n var fpath = cfb.FullPaths[0];\n if (name.slice(0, fpath.length) == fpath) fpath = name;else {\n if (fpath.slice(-1) != \"/\") fpath += \"/\";\n fpath = (fpath + name).replace(\"//\", \"/\");\n }\n file = {\n name: filename(name),\n type: 2\n };\n cfb.FileIndex.push(file);\n cfb.FullPaths.push(fpath);\n if (!unsafe) CFB.utils.cfb_gc(cfb);\n }\n\n file.content = content;\n file.size = content ? content.length : 0;\n\n if (opts) {\n if (opts.CLSID) file.clsid = opts.CLSID;\n if (opts.mt) file.mt = opts.mt;\n if (opts.ct) file.ct = opts.ct;\n }\n\n return file;\n }\n\n function cfb_del(cfb, name) {\n init_cfb(cfb);\n var file = CFB.find(cfb, name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex.splice(j, 1);\n cfb.FullPaths.splice(j, 1);\n return true;\n }\n }\n return false;\n }\n\n function cfb_mov(cfb, old_name, new_name) {\n init_cfb(cfb);\n var file = CFB.find(cfb, old_name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex[j].name = filename(new_name);\n cfb.FullPaths[j] = new_name;\n return true;\n }\n }\n return false;\n }\n\n function cfb_gc(cfb) {\n rebuild_cfb(cfb, true);\n }\n\n exports.find = find;\n exports.read = read;\n exports.parse = parse;\n exports.write = write;\n exports.writeFile = write_file;\n exports.utils = {\n cfb_new: cfb_new,\n cfb_add: cfb_add,\n cfb_del: cfb_del,\n cfb_mov: cfb_mov,\n cfb_gc: cfb_gc,\n ReadShift: ReadShift,\n CheckField: CheckField,\n prep_blob: prep_blob,\n bconcat: bconcat,\n use_zlib: use_zlib,\n _deflateRaw: _deflate,\n _inflateRaw: _inflate,\n consts: consts\n };\n return exports;\n }();\n\n if (typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') {\n module.exports = CFB;\n }\n\n var _fs;\n\n if (typeof require !== 'undefined') try {\n _fs = require('fs');\n } catch (e) {}\n /* normalize data for blob ctor */\n\n function blobify(data) {\n if (typeof data === \"string\") return s2ab(data);\n if (Array.isArray(data)) return a2u(data);\n return data;\n }\n /* write or download file */\n\n\n function write_dl(fname, payload, enc) {\n /*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n if (typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n var data = enc == \"utf8\" ? utf8write(payload) : payload;\n if (typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\n if (typeof Blob !== 'undefined') {\n var blob = new Blob([blobify(data)], {\n type: \"application/octet-stream\"\n });\n if (typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n if (typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\n if (typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n var url = URL.createObjectURL(blob);\n\n if (typeof chrome === 'object' && typeof (chrome.downloads || {}).download == \"function\") {\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return chrome.downloads.download({\n url: url,\n filename: fname,\n saveAs: true\n });\n }\n\n var a = document.createElement(\"a\");\n\n if (a.download != null) {\n a.download = fname;\n a.href = url;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return url;\n }\n }\n } // $FlowIgnore\n\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var out = File(fname);\n out.open(\"w\");\n out.encoding = \"binary\";\n if (Array.isArray(payload)) payload = a2s(payload);\n out.write(payload);\n out.close();\n return payload;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"cannot save file \" + fname);\n }\n /* read binary data from file */\n\n\n function read_binary(path) {\n if (typeof _fs !== 'undefined') return _fs.readFileSync(path); // $FlowIgnore\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var infile = File(path);\n infile.open(\"r\");\n infile.encoding = \"binary\";\n var data = infile.read();\n infile.close();\n return data;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"Cannot access file \" + path);\n }\n\n function keys(o) {\n var ks = Object.keys(o),\n o2 = [];\n\n for (var i = 0; i < ks.length; ++i) {\n if (Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n }\n\n return o2;\n }\n\n function evert_key(obj, key) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n }\n\n return o;\n }\n\n function evert(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = K[i];\n }\n\n return o;\n }\n\n function evert_num(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = parseInt(K[i], 10);\n }\n\n return o;\n }\n\n function evert_arr(obj) {\n var o = [],\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n o[obj[K[i]]].push(K[i]);\n }\n\n return o;\n }\n\n var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\n\n function datenum(v, date1904) {\n var epoch = v.getTime();\n if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000;\n var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n return (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n }\n\n var refdate = new Date();\n var dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n var refoffset = refdate.getTimezoneOffset();\n\n function numdate(v) {\n var out = new Date();\n out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\n if (out.getTimezoneOffset() !== refoffset) {\n out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n }\n\n return out;\n }\n /* ISO 8601 Duration */\n\n\n function parse_isodur(s) {\n var sec = 0,\n mt = 0,\n time = false;\n var m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n if (!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\n for (var i = 1; i != m.length; ++i) {\n if (!m[i]) continue;\n mt = 1;\n if (i > 3) time = true;\n\n switch (m[i].slice(m[i].length - 1)) {\n case 'Y':\n throw new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length - 1));\n\n case 'D':\n mt *= 24;\n\n /* falls through */\n\n case 'H':\n mt *= 60;\n\n /* falls through */\n\n case 'M':\n if (!time) throw new Error(\"Unsupported ISO Duration Field: M\");else mt *= 60;\n\n /* falls through */\n\n case 'S':\n break;\n }\n\n sec += mt * parseInt(m[i], 10);\n }\n\n return sec;\n }\n\n var good_pd_date = new Date('2017-02-19T19:06:09.000Z');\n if (isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');\n var good_pd = good_pd_date.getFullYear() == 2017;\n /* parses a date as a local date */\n\n function parseDate(str, fixdate) {\n var d = new Date(str);\n\n if (good_pd) {\n if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n return d;\n }\n\n if (str instanceof Date) return str;\n\n if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n var s = d.getFullYear();\n if (str.indexOf(\"\" + s) > -1) return d;\n d.setFullYear(d.getFullYear() + 100);\n return d;\n }\n\n var n = str.match(/\\d+/g) || [\"2017\", \"2\", \"19\", \"0\", \"0\", \"0\"];\n var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);\n if (str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n return out;\n }\n\n function cc2str(arr) {\n var o = \"\";\n\n for (var i = 0; i != arr.length; ++i) {\n o += String.fromCharCode(arr[i]);\n }\n\n return o;\n }\n\n function dup(o) {\n if (typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n if (typeof o != 'object' || o == null) return o;\n if (o instanceof Date) return new Date(o.getTime());\n var out = {};\n\n for (var k in o) {\n if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n }\n\n return out;\n }\n\n function fill(c, l) {\n var o = \"\";\n\n while (o.length < l) {\n o += c;\n }\n\n return o;\n }\n /* TODO: stress test */\n\n\n function fuzzynum(s) {\n var v = Number(s);\n if (!isNaN(v)) return v;\n if (!/\\d/.test(s)) return v;\n var wt = 1;\n var ss = s.replace(/([\\d]),([\\d])/g, \"$1$2\").replace(/[$]/g, \"\").replace(/[%]/g, function () {\n wt *= 100;\n return \"\";\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n ss = ss.replace(/[(](.*)[)]/, function ($$, $1) {\n wt = -wt;\n return $1;\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n return v;\n }\n\n function fuzzydate(s) {\n var o = new Date(s),\n n = new Date(NaN);\n var y = o.getYear(),\n m = o.getMonth(),\n d = o.getDate();\n if (isNaN(d)) return n;\n if (y < 0 || y > 8099) return n;\n if ((m > 0 || d > 1) && y != 101) return o;\n if (s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o;\n if (s.match(/[^-0-9:,\\/\\\\]/)) return n;\n return o;\n }\n\n var safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\n function split_regex(str, re, def) {\n if (safe_split_regex || typeof re == \"string\") return str.split(re);\n var p = str.split(re),\n o = [p[0]];\n\n for (var i = 1; i < p.length; ++i) {\n o.push(def);\n o.push(p[i]);\n }\n\n return o;\n }\n\n function getdatastr(data) {\n if (!data) return null;\n if (data.data) return debom(data.data);\n if (data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n if (data.asBinary) return debom(data.asBinary());\n if (data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(), 0)));\n if (data.content && data.type) return debom(cc2str(data.content));\n return null;\n }\n\n function getdatabin(data) {\n if (!data) return null;\n if (data.data) return char_codes(data.data);\n if (data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\n if (data._data && data._data.getContent) {\n var o = data._data.getContent();\n\n if (typeof o == \"string\") return char_codes(o);\n return Array.prototype.slice.call(o);\n }\n\n if (data.content && data.type) return data.content;\n return null;\n }\n\n function getdata(data) {\n 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\n /* OASIS does not comment on filename case sensitivity */\n\n\n function safegetzipfile(zip, file) {\n var k = zip.FullPaths || keys(zip.files);\n var f = file.toLowerCase(),\n g = f.replace(/\\//g, '\\\\');\n\n for (var i = 0; i < k.length; ++i) {\n var n = k[i].toLowerCase();\n if (f == n || g == n) return zip.files[k[i]];\n }\n\n return null;\n }\n\n function getzipfile(zip, file) {\n var o = safegetzipfile(zip, file);\n if (o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n return o;\n }\n\n function getzipdata(zip, file, safe) {\n if (!safe) return getdata(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipdata(zip, file);\n } catch (e) {\n return null;\n }\n }\n\n function getzipstr(zip, file, safe) {\n if (!safe) return getdatastr(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipstr(zip, file);\n } catch (e) {\n return null;\n }\n }\n\n function zipentries(zip) {\n var k = zip.FullPaths || keys(zip.files),\n o = [];\n\n for (var i = 0; i < k.length; ++i) {\n if (k[i].slice(-1) != '/') o.push(k[i]);\n }\n\n return o.sort();\n }\n\n function zip_add_file(zip, path, content) {\n if (zip.FullPaths) CFB.utils.cfb_add(zip, path, content);else zip.file(path, content);\n }\n\n var jszip;\n /*global JSZipSync:true */\n\n if (typeof JSZipSync !== 'undefined') jszip = JSZipSync;\n\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n if (typeof jszip === 'undefined') jszip = require('./jszip.js');\n }\n }\n\n function zip_new() {\n if (!jszip) return CFB.utils.cfb_new();\n return new jszip();\n }\n\n function zip_read(d, o) {\n var zip;\n if (jszip) switch (o.type) {\n case \"base64\":\n zip = new jszip(d, {\n base64: true\n });\n break;\n\n case \"binary\":\n case \"array\":\n zip = new jszip(d, {\n base64: false\n });\n break;\n\n case \"buffer\":\n zip = new jszip(d);\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n } else switch (o.type) {\n case \"base64\":\n zip = CFB.read(d, {\n type: \"base64\"\n });\n break;\n\n case \"binary\":\n zip = CFB.read(d, {\n type: \"binary\"\n });\n break;\n\n case \"buffer\":\n case \"array\":\n zip = CFB.read(d, {\n type: \"buffer\"\n });\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n return zip;\n }\n\n function resolve_path(path, base) {\n if (path.charAt(0) == \"/\") return path.slice(1);\n var result = base.split('/');\n if (base.slice(-1) != \"/\") result.pop(); // folder path\n\n var target = path.split('/');\n\n while (target.length !== 0) {\n var step = target.shift();\n if (step === '..') result.pop();else if (step !== '.') result.push(step);\n }\n\n return result.join('/');\n }\n\n var XML_HEADER = '\\r\\n';\n var attregexg = /([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\n var tagregex = /<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s?[\\/\\?]?>/mg;\n if (!XML_HEADER.match(tagregex)) tagregex = /<[^>]*>/g;\n var nsregex = /<\\w*:/,\n nsregex2 = /<(\\/?)\\w+:/;\n\n function parsexmltag(tag, skip_root, skip_LC) {\n var z = {};\n var eq = 0,\n c = 0;\n\n for (; eq !== tag.length; ++eq) {\n if ((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n }\n\n if (!skip_root) z[0] = tag.slice(0, eq);\n if (eq === tag.length) return z;\n var m = tag.match(attregexg),\n j = 0,\n v = \"\",\n i = 0,\n q = \"\",\n cc = \"\",\n quot = 1;\n if (m) for (i = 0; i != m.length; ++i) {\n cc = m[i];\n\n for (c = 0; c != cc.length; ++c) {\n if (cc.charCodeAt(c) === 61) break;\n }\n\n q = cc.slice(0, c).trim();\n\n while (cc.charCodeAt(c + 1) == 32) {\n ++c;\n }\n\n quot = (eq = cc.charCodeAt(c + 1)) == 34 || eq == 39 ? 1 : 0;\n v = cc.slice(c + 1 + quot, cc.length - quot);\n\n for (j = 0; j != q.length; ++j) {\n if (q.charCodeAt(j) === 58) break;\n }\n\n if (j === q.length) {\n if (q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\n z[q] = v;\n if (!skip_LC) z[q.toLowerCase()] = v;\n } else {\n var k = (j === 5 && q.slice(0, 5) === \"xmlns\" ? \"xmlns\" : \"\") + q.slice(j + 1);\n if (z[k] && q.slice(j - 3, j) == \"ext\") continue; // from ods\n\n z[k] = v;\n if (!skip_LC) z[k.toLowerCase()] = v;\n }\n }\n return z;\n }\n\n function strip_ns(x) {\n return x.replace(nsregex2, \"<$1\");\n }\n\n var encodings = {\n '"': '\"',\n ''': \"'\",\n '>': '>',\n '<': '<',\n '&': '&'\n };\n var rencoding = evert(encodings); //var rencstr = \"&<>'\\\"\".split(\"\");\n // TODO: CP remap (need to read file version to determine OS)\n\n var unescapexml = function () {\n /* 22.4.2.4 bstr (Basic String) */\n var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig,\n coderegex = /_x([\\da-fA-F]{4})_/ig;\n return function unescapexml(text) {\n var s = text + '',\n i = s.indexOf(\" -1 ? 16 : 10)) || $$;\n }).replace(coderegex, function (m, c) {\n return String.fromCharCode(parseInt(c, 16));\n });\n var j = s.indexOf(\"]]>\");\n return unescapexml(s.slice(0, i)) + s.slice(i + 9, j) + unescapexml(s.slice(j + 3));\n };\n }();\n\n var decregex = /[&<>'\"]/g,\n charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\n\n function escapexml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(charegex, function (s) {\n return \"_x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \"_\";\n });\n }\n\n function escapexmltag(text) {\n return escapexml(text).replace(/ /g, \"_x0020_\");\n }\n\n var htmlcharegex = /[\\u0000-\\u001f]/g;\n\n function escapehtml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(/\\n/g, \"
\").replace(htmlcharegex, function (s) {\n return \"\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \";\";\n });\n }\n\n function escapexlml(text) {\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(htmlcharegex, function (s) {\n return \"\" + s.charCodeAt(0).toString(16).toUpperCase() + \";\";\n });\n }\n /* TODO: handle codepages */\n\n\n var xlml_fixstr = function () {\n var entregex = /(\\d+);/g;\n\n function entrepl($$, $1) {\n return String.fromCharCode(parseInt($1, 10));\n }\n\n return function xlml_fixstr(str) {\n return str.replace(entregex, entrepl);\n };\n }();\n\n var xlml_unfixstr = function () {\n return function xlml_unfixstr(str) {\n return str.replace(/(\\r\\n|[\\r\\n])/g, \"\\
\");\n };\n }();\n\n function parsexmlbool(value) {\n switch (value) {\n case 1:\n case true:\n case '1':\n case 'true':\n case 'TRUE':\n return true;\n\n /* case '0': case 'false': case 'FALSE':*/\n\n default:\n return false;\n }\n }\n\n var utf8read = function utf8reada(orig) {\n var out = \"\",\n i = 0,\n c = 0,\n d = 0,\n e = 0,\n f = 0,\n w = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n if (c < 128) {\n out += String.fromCharCode(c);\n continue;\n }\n\n d = orig.charCodeAt(i++);\n\n if (c > 191 && c < 224) {\n f = (c & 31) << 6;\n f |= d & 63;\n out += String.fromCharCode(f);\n continue;\n }\n\n e = orig.charCodeAt(i++);\n\n if (c < 240) {\n out += String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);\n continue;\n }\n\n f = orig.charCodeAt(i++);\n w = ((c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63) - 65536;\n out += String.fromCharCode(0xD800 + (w >>> 10 & 1023));\n out += String.fromCharCode(0xDC00 + (w & 1023));\n }\n\n return out;\n };\n\n var utf8write = function utf8write(orig) {\n var out = [],\n i = 0,\n c = 0,\n d = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n switch (true) {\n case c < 128:\n out.push(String.fromCharCode(c));\n break;\n\n case c < 2048:\n out.push(String.fromCharCode(192 + (c >> 6)));\n out.push(String.fromCharCode(128 + (c & 63)));\n break;\n\n case c >= 55296 && c < 57344:\n c -= 55296;\n d = orig.charCodeAt(i++) - 56320 + (c << 10);\n out.push(String.fromCharCode(240 + (d >> 18 & 7)));\n out.push(String.fromCharCode(144 + (d >> 12 & 63)));\n out.push(String.fromCharCode(128 + (d >> 6 & 63)));\n out.push(String.fromCharCode(128 + (d & 63)));\n break;\n\n default:\n out.push(String.fromCharCode(224 + (c >> 12)));\n out.push(String.fromCharCode(128 + (c >> 6 & 63)));\n out.push(String.fromCharCode(128 + (c & 63)));\n }\n }\n\n return out.join(\"\");\n };\n\n if (has_buf) {\n var utf8readb = function utf8readb(data) {\n var out = Buffer.alloc(2 * data.length),\n w,\n i,\n j = 1,\n k = 0,\n ww = 0,\n c;\n\n for (i = 0; i < data.length; i += j) {\n j = 1;\n if ((c = data.charCodeAt(i)) < 128) w = c;else if (c < 224) {\n w = (c & 31) * 64 + (data.charCodeAt(i + 1) & 63);\n j = 2;\n } else if (c < 240) {\n w = (c & 15) * 4096 + (data.charCodeAt(i + 1) & 63) * 64 + (data.charCodeAt(i + 2) & 63);\n j = 3;\n } else {\n j = 4;\n w = (c & 7) * 262144 + (data.charCodeAt(i + 1) & 63) * 4096 + (data.charCodeAt(i + 2) & 63) * 64 + (data.charCodeAt(i + 3) & 63);\n w -= 65536;\n ww = 0xD800 + (w >>> 10 & 1023);\n w = 0xDC00 + (w & 1023);\n }\n\n if (ww !== 0) {\n out[k++] = ww & 255;\n out[k++] = ww >>> 8;\n ww = 0;\n }\n\n out[k++] = w % 256;\n out[k++] = w >>> 8;\n }\n\n return out.slice(0, k).toString('ucs2');\n };\n\n var corpus = \"foo bar baz\\xE2\\x98\\x83\\xF0\\x9F\\x8D\\xA3\";\n if (utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\n\n var utf8readc = function utf8readc(data) {\n return Buffer_from(data, 'binary').toString('utf8');\n };\n\n if (utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\n\n utf8write = function utf8write(data) {\n return Buffer_from(data, 'utf8').toString(\"binary\");\n };\n } // matches ... extracts content\n\n\n var matchtag = function () {\n var mtcache = {};\n return function matchtag(f, g) {\n var t = f + \"|\" + (g || \"\");\n if (mtcache[t]) return mtcache[t];\n return mtcache[t] = new RegExp('<(?:\\\\w+:)?' + f + '(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)(?:\\\\w+:)?' + f + '>', g || \"\");\n };\n }();\n\n var htmldecode = function () {\n var entities = [['nbsp', ' '], ['middot', '·'], ['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']].map(function (x) {\n return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]];\n });\n return function htmldecode(str) {\n var o = str // Remove new lines and spaces from start of content\n .replace(/^[\\t\\n\\r ]+/, \"\") // Remove new lines and spaces from end of content\n .replace(/[\\t\\n\\r ]+$/, \"\") // Added line which removes any white space characters after and before html tags\n .replace(/>\\s+/g, \">\").replace(/\\s+ tags with new lines\n .replace(/<\\s*[bB][rR]\\s*\\/?>/g, \"\\n\") // Strip HTML elements\n .replace(/<[^>]*>/g, \"\");\n\n for (var i = 0; i < entities.length; ++i) {\n o = o.replace(entities[i][0], entities[i][1]);\n }\n\n return o;\n };\n }();\n\n var vtregex = function () {\n var vt_cache = {};\n return function vt_regex(bt) {\n if (vt_cache[bt] !== undefined) return vt_cache[bt];\n return vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)(?:vt:)?\" + bt + \">\", 'g');\n };\n }();\n\n var vtvregex = /<\\/?(?:vt:)?variant>/g,\n vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*);\n\n function parseVector(data, opts) {\n var h = parsexmltag(data);\n var matches = data.match(vtregex(h.baseType)) || [];\n var res = [];\n\n if (matches.length != h.size) {\n if (opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n return res;\n }\n\n matches.forEach(function (x) {\n var v = x.replace(vtvregex, \"\").match(vtmregex);\n if (v) res.push({\n v: utf8read(v[2]),\n t: v[1]\n });\n });\n return res;\n }\n\n var wtregex = /(^\\s|\\s$|\\n)/;\n\n function writetag(f, g) {\n return '<' + f + (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '' + f + '>';\n }\n\n function wxt_helper(h) {\n return keys(h).map(function (k) {\n return \" \" + k + '=\"' + h[k] + '\"';\n }).join(\"\");\n }\n\n function writextag(f, g, h) {\n return '<' + f + (h != null ? wxt_helper(h) : \"\") + (g != null ? (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '' + f : \"/\") + '>';\n }\n\n function write_w3cdtf(d, t) {\n try {\n return d.toISOString().replace(/\\.\\d*/, \"\");\n } catch (e) {\n if (t) throw e;\n }\n\n return \"\";\n }\n\n function write_vt(s, xlsx) {\n switch (typeof s) {\n case 'string':\n var o = writextag('vt:lpwstr', escapexml(s));\n if (xlsx) o = o.replace(/"/g, \"_x0022_\");\n return o;\n\n case 'number':\n return writextag((s | 0) == s ? 'vt:i4' : 'vt:r8', escapexml(String(s)));\n\n case 'boolean':\n return writextag('vt:bool', s ? 'true' : 'false');\n }\n\n if (s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n throw new Error(\"Unable to serialize \" + s);\n }\n\n var XMLNS = {\n 'dc': 'http://purl.org/dc/elements/1.1/',\n 'dcterms': 'http://purl.org/dc/terms/',\n 'dcmitype': 'http://purl.org/dc/dcmitype/',\n 'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n 'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xsd': 'http://www.w3.org/2001/XMLSchema'\n };\n XMLNS.main = ['http://schemas.openxmlformats.org/spreadsheetml/2006/main', 'http://purl.oclc.org/ooxml/spreadsheetml/main', 'http://schemas.microsoft.com/office/excel/2006/main', 'http://schemas.microsoft.com/office/excel/2006/2'];\n var XLMLNS = {\n 'o': 'urn:schemas-microsoft-com:office:office',\n 'x': 'urn:schemas-microsoft-com:office:excel',\n 'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n 'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n 'mv': 'http://macVmlSchemaUri',\n 'v': 'urn:schemas-microsoft-com:vml',\n 'html': 'http://www.w3.org/TR/REC-html40'\n };\n\n function read_double_le(b, idx) {\n var s = 1 - 2 * (b[idx + 7] >>> 7);\n var e = ((b[idx + 7] & 0x7f) << 4) + (b[idx + 6] >>> 4 & 0x0f);\n var m = b[idx + 6] & 0x0f;\n\n for (var i = 5; i >= 0; --i) {\n m = m * 256 + b[idx + i];\n }\n\n if (e == 0x7ff) return m == 0 ? s * Infinity : NaN;\n if (e == 0) e = -1022;else {\n e -= 1023;\n m += Math.pow(2, 52);\n }\n return s * Math.pow(2, e - 52) * m;\n }\n\n function write_double_le(b, v, idx) {\n var bs = (v < 0 || 1 / v == -Infinity ? 1 : 0) << 7,\n e = 0,\n m = 0;\n var av = bs ? -v : v;\n\n if (!isFinite(av)) {\n e = 0x7ff;\n m = isNaN(v) ? 0x6969 : 0;\n } else if (av == 0) e = m = 0;else {\n e = Math.floor(Math.log(av) / Math.LN2);\n m = av * Math.pow(2, 52 - e);\n\n if (e <= -1023 && (!isFinite(m) || m < Math.pow(2, 52))) {\n e = -1022;\n } else {\n m -= Math.pow(2, 52);\n e += 1023;\n }\n }\n\n for (var i = 0; i <= 5; ++i, m /= 256) {\n b[idx + i] = m & 0xff;\n }\n\n b[idx + 6] = (e & 0x0f) << 4 | m & 0xf;\n b[idx + 7] = e >> 4 | bs;\n }\n\n var __toBuffer = function __toBuffer(bufs) {\n var x = [],\n w = 10240;\n\n for (var i = 0; i < bufs[0].length; ++i) {\n if (bufs[0][i]) for (var j = 0, L = bufs[0][i].length; j < L; j += w) {\n x.push.apply(x, bufs[0][i].slice(j, j + w));\n }\n }\n\n return x;\n };\n\n var ___toBuffer = __toBuffer;\n\n var __utf16le = function __utf16le(b, s, e) {\n var ss = [];\n\n for (var i = s; i < e; i += 2) {\n ss.push(String.fromCharCode(__readUInt16LE(b, i)));\n }\n\n return ss.join(\"\").replace(chr0, '');\n };\n\n var ___utf16le = __utf16le;\n\n var __hexlify = function __hexlify(b, s, l) {\n var ss = [];\n\n for (var i = s; i < s + l; ++i) {\n ss.push((\"0\" + b[i].toString(16)).slice(-2));\n }\n\n return ss.join(\"\");\n };\n\n var ___hexlify = __hexlify;\n\n var __utf8 = function __utf8(b, s, e) {\n var ss = [];\n\n for (var i = s; i < e; i++) {\n ss.push(String.fromCharCode(__readUInt8(b, i)));\n }\n\n return ss.join(\"\");\n };\n\n var ___utf8 = __utf8;\n\n var __lpstr = function __lpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___lpstr = __lpstr;\n\n var __cpstr = function __cpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___cpstr = __cpstr;\n\n var __lpwstr = function __lpwstr(b, i) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n };\n\n var ___lpwstr = __lpwstr;\n\n var __lpp4, ___lpp4;\n\n __lpp4 = ___lpp4 = function lpp4_(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf16le(b, i + 4, i + 4 + len) : \"\";\n };\n\n var __8lpp4 = function __8lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len) : \"\";\n };\n\n var ___8lpp4 = __8lpp4;\n\n var __double, ___double;\n\n __double = ___double = function ___double(b, idx) {\n return read_double_le(b, idx);\n };\n\n var is_buf = function is_buf_a(a) {\n return Array.isArray(a);\n };\n\n if (has_buf) {\n __utf16le = function __utf16le(b, s, e) {\n if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);\n return b.toString('utf16le', s, e).replace(chr0, '')\n /*.replace(chr1,'!')*/\n ;\n };\n\n __hexlify = function __hexlify(b, s, l) {\n return Buffer.isBuffer(b) ? b.toString('hex', s, s + l) : ___hexlify(b, s, l);\n };\n\n __lpstr = function lpstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __cpstr = function cpstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___cpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __lpwstr = function lpwstr_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpwstr(b, i);\n var len = 2 * b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len - 1);\n };\n\n __lpp4 = function lpp4_b(b, i) {\n if (!Buffer.isBuffer(b)) return ___lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len);\n };\n\n __8lpp4 = function lpp4_8b(b, i) {\n if (!Buffer.isBuffer(b)) return ___8lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf8', i + 4, i + 4 + len);\n };\n\n __utf8 = function utf8_b(b, s, e) {\n return Buffer.isBuffer(b) ? b.toString('utf8', s, e) : ___utf8(b, s, e);\n };\n\n __toBuffer = function __toBuffer(bufs) {\n return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);\n };\n\n bconcat = function bconcat(bufs) {\n return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs);\n };\n\n __double = function double_(b, i) {\n if (Buffer.isBuffer(b)) return b.readDoubleLE(i);\n return ___double(b, i);\n };\n\n is_buf = function is_buf_b(a) {\n return Buffer.isBuffer(a) || Array.isArray(a);\n };\n }\n /* from js-xls */\n\n\n if (typeof cptable !== 'undefined') {\n __utf16le = function __utf16le(b, s, e) {\n return cptable.utils.decode(1200, b.slice(s, e)).replace(chr0, '');\n };\n\n __utf8 = function __utf8(b, s, e) {\n return cptable.utils.decode(65001, b.slice(s, e));\n };\n\n __lpstr = function __lpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __cpstr = function __cpstr(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpwstr = function __lpwstr(b, i) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpp4 = function __lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n\n __8lpp4 = function __8lpp4(b, i) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? cptable.utils.decode(65001, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n }\n\n var __readUInt8 = function __readUInt8(b, idx) {\n return b[idx];\n };\n\n var __readUInt16LE = function __readUInt16LE(b, idx) {\n return b[idx + 1] * (1 << 8) + b[idx];\n };\n\n var __readInt16LE = function __readInt16LE(b, idx) {\n var u = b[idx + 1] * (1 << 8) + b[idx];\n return u < 0x8000 ? u : (0xffff - u + 1) * -1;\n };\n\n var __readUInt32LE = function __readUInt32LE(b, idx) {\n return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n };\n\n var __readInt32LE = function __readInt32LE(b, idx) {\n return b[idx + 3] << 24 | b[idx + 2] << 16 | b[idx + 1] << 8 | b[idx];\n };\n\n var __readInt32BE = function __readInt32BE(b, idx) {\n return b[idx] << 24 | b[idx + 1] << 16 | b[idx + 2] << 8 | b[idx + 3];\n };\n\n function ReadShift(size, t) {\n var o = \"\",\n oI,\n oR,\n oo = [],\n w,\n vv,\n i,\n loc;\n\n switch (t) {\n case 'dbcs':\n loc = this.l;\n if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString(\"utf16le\");else for (i = 0; i < size; ++i) {\n o += String.fromCharCode(__readUInt16LE(this, loc));\n loc += 2;\n }\n size *= 2;\n break;\n\n case 'utf8':\n o = __utf8(this, this.l, this.l + size);\n break;\n\n case 'utf16le':\n size *= 2;\n o = __utf16le(this, this.l, this.l + size);\n break;\n\n case 'wstr':\n if (typeof cptable !== 'undefined') o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + 2 * size));else return ReadShift.call(this, size, 'dbcs');\n size = 2 * size;\n break;\n\n /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\n case 'lpstr-ansi':\n o = __lpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n case 'lpstr-cp':\n o = __cpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\n case 'lpwstr':\n o = __lpwstr(this, this.l);\n size = 4 + 2 * __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\n case 'lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __lpp4(this, this.l);\n if (size & 0x02) size += 2;\n break;\n\n /* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\n case '8lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __8lpp4(this, this.l);\n if (size & 0x03) size += 4 - (size & 0x03);\n break;\n\n case 'cstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt8(this, this.l + size++)) !== 0) {\n oo.push(_getchar(w));\n }\n\n o = oo.join(\"\");\n break;\n\n case '_wstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt16LE(this, this.l + size)) !== 0) {\n oo.push(_getchar(w));\n size += 2;\n }\n\n size += 2;\n o = oo.join(\"\");\n break;\n\n /* sbcs and dbcs support continue records in the SST way TODO codepages */\n\n case 'dbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i < size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt16LE(this, loc)));\n loc += 2;\n }\n\n o = oo.join(\"\");\n size *= 2;\n break;\n\n case 'cpstr':\n if (typeof cptable !== 'undefined') {\n o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n break;\n }\n\n /* falls through */\n\n case 'sbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i != size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt8(this, loc)));\n loc += 1;\n }\n\n o = oo.join(\"\");\n break;\n\n default:\n switch (size) {\n case 1:\n oI = __readUInt8(this, this.l);\n this.l++;\n return oI;\n\n case 2:\n oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l);\n this.l += 2;\n return oI;\n\n case 4:\n case -4:\n if (t === 'i' || (this[this.l + 3] & 0x80) === 0) {\n oI = (size > 0 ? __readInt32LE : __readInt32BE)(this, this.l);\n this.l += 4;\n return oI;\n } else {\n oR = __readUInt32LE(this, this.l);\n this.l += 4;\n }\n\n return oR;\n\n case 8:\n case -8:\n if (t === 'f') {\n if (size == 8) oR = __double(this, this.l);else 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 this.l += 8;\n return oR;\n } else size = 8;\n\n /* falls through */\n\n case 16:\n o = __hexlify(this, this.l, size);\n break;\n }\n\n }\n\n this.l += size;\n return o;\n }\n\n var __writeUInt32LE = function __writeUInt32LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n b[idx + 2] = val >>> 16 & 0xFF;\n b[idx + 3] = val >>> 24 & 0xFF;\n };\n\n var __writeInt32LE = function __writeInt32LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >> 8 & 0xFF;\n b[idx + 2] = val >> 16 & 0xFF;\n b[idx + 3] = val >> 24 & 0xFF;\n };\n\n var __writeUInt16LE = function __writeUInt16LE(b, val, idx) {\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n };\n\n function WriteShift(t, val, f) {\n var size = 0,\n i = 0;\n\n if (f === 'dbcs') {\n for (i = 0; i != val.length; ++i) {\n __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n }\n\n size = 2 * val.length;\n } else if (f === 'sbcs') {\n if (typeof cptable !== 'undefined' && current_ansi == 874) {\n /* TODO: use tables directly, don't encode */\n for (i = 0; i != val.length; ++i) {\n var cppayload = cptable.utils.encode(current_ansi, val.charAt(i));\n this[this.l + i] = cppayload[0];\n }\n } else {\n val = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\n for (i = 0; i != val.length; ++i) {\n this[this.l + i] = val.charCodeAt(i) & 0xFF;\n }\n }\n\n size = val.length;\n } else if (f === 'hex') {\n for (; i < t; ++i) {\n this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;\n }\n\n return this;\n } else if (f === 'utf16le') {\n var end = Math.min(this.l + t, this.length);\n\n for (i = 0; i < Math.min(val.length, t); ++i) {\n var cc = val.charCodeAt(i);\n this[this.l++] = cc & 0xff;\n this[this.l++] = cc >> 8;\n }\n\n while (this.l < end) {\n this[this.l++] = 0;\n }\n\n return this;\n } else switch (t) {\n case 1:\n size = 1;\n this[this.l] = val & 0xFF;\n break;\n\n case 2:\n size = 2;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n break;\n\n case 3:\n size = 3;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n val >>>= 8;\n this[this.l + 2] = val & 0xFF;\n break;\n\n case 4:\n size = 4;\n\n __writeUInt32LE(this, val, this.l);\n\n break;\n\n case 8:\n size = 8;\n\n if (f === 'f') {\n write_double_le(this, val, this.l);\n break;\n }\n\n /* falls through */\n\n case 16:\n break;\n\n case -4:\n size = 4;\n\n __writeInt32LE(this, val, this.l);\n\n break;\n }\n\n this.l += size;\n return this;\n }\n\n function CheckField(hexstr, fld) {\n var m = __hexlify(this, this.l, hexstr.length >> 1);\n\n if (m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n this.l += hexstr.length >> 1;\n }\n\n function prep_blob(blob, pos) {\n blob.l = pos;\n blob.read_shift = ReadShift;\n blob.chk = CheckField;\n blob.write_shift = WriteShift;\n }\n\n function parsenoop(blob, length) {\n blob.l += length;\n }\n\n function new_buf(sz) {\n var o = new_raw_buf(sz);\n prep_blob(o, 0);\n return o;\n }\n /* [MS-XLSB] 2.1.4 Record */\n\n\n function recordhopper(data, cb, opts) {\n if (!data) return;\n var tmpbyte, cntbyte, length;\n prep_blob(data, data.l || 0);\n var L = data.length,\n RT = 0,\n tgt = 0;\n\n while (data.l < L) {\n RT = data.read_shift(1);\n if (RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F) << 7);\n var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n tmpbyte = data.read_shift(1);\n length = tmpbyte & 0x7F;\n\n for (cntbyte = 1; cntbyte < 4 && tmpbyte & 0x80; ++cntbyte) {\n length += ((tmpbyte = data.read_shift(1)) & 0x7F) << 7 * cntbyte;\n }\n\n tgt = data.l + length;\n var d = (R.f || parsenoop)(data, length, opts);\n data.l = tgt;\n if (cb(d, R.n, RT)) return;\n }\n }\n /* control buffer usage for fixed-length buffers */\n\n\n function buf_array() {\n var bufs = [],\n blksz = has_buf ? 256 : 2048;\n\n var newblk = function ba_newblk(sz) {\n var o = new_buf(sz);\n prep_blob(o, 0);\n return o;\n };\n\n var curbuf = newblk(blksz);\n\n var endbuf = function ba_endbuf() {\n if (!curbuf) return;\n\n if (curbuf.length > curbuf.l) {\n curbuf = curbuf.slice(0, curbuf.l);\n curbuf.l = curbuf.length;\n }\n\n if (curbuf.length > 0) bufs.push(curbuf);\n curbuf = null;\n };\n\n var next = function ba_next(sz) {\n if (curbuf && sz < curbuf.length - curbuf.l) return curbuf;\n endbuf();\n return curbuf = newblk(Math.max(sz + 1, blksz));\n };\n\n var end = function ba_end() {\n endbuf();\n return __toBuffer([bufs]);\n };\n\n var push = function ba_push(buf) {\n endbuf();\n curbuf = buf;\n if (curbuf.l == null) curbuf.l = curbuf.length;\n next(blksz);\n };\n\n return {\n next: next,\n push: push,\n end: end,\n _bufs: bufs\n };\n }\n\n function write_record(ba, type, payload, length) {\n var t = +XLSBRE[type],\n l;\n if (isNaN(t)) return; // TODO: throw something here?\n\n if (!length) length = XLSBRecordEnum[t].p || (payload || []).length || 0;\n l = 1 + (t >= 0x80 ? 1 : 0) + 1\n /* + length*/\n ;\n if (length >= 0x80) ++l;\n if (length >= 0x4000) ++l;\n if (length >= 0x200000) ++l;\n var o = ba.next(l);\n if (t <= 0x7F) o.write_shift(1, t);else {\n o.write_shift(1, (t & 0x7F) + 0x80);\n o.write_shift(1, t >> 7);\n }\n\n for (var i = 0; i != 4; ++i) {\n if (length >= 0x80) {\n o.write_shift(1, (length & 0x7F) + 0x80);\n length >>= 7;\n } else {\n o.write_shift(1, length);\n break;\n }\n }\n\n if (length > 0 && is_buf(payload)) ba.push(payload);\n }\n /* XLS ranges enforced */\n\n\n function shift_cell_xls(cell, tgt, opts) {\n var out = dup(cell);\n\n if (tgt.s) {\n if (out.cRel) out.c += tgt.s.c;\n if (out.rRel) out.r += tgt.s.r;\n } else {\n if (out.cRel) out.c += tgt.c;\n if (out.rRel) out.r += tgt.r;\n }\n\n if (!opts || opts.biff < 12) {\n while (out.c >= 0x100) {\n out.c -= 0x100;\n }\n\n while (out.r >= 0x10000) {\n out.r -= 0x10000;\n }\n }\n\n return out;\n }\n\n function shift_range_xls(cell, range, opts) {\n var out = dup(cell);\n out.s = shift_cell_xls(out.s, range.s, opts);\n out.e = shift_cell_xls(out.e, range.s, opts);\n return out;\n }\n\n function encode_cell_xls(c, biff) {\n if (c.cRel && c.c < 0) {\n c = dup(c);\n\n while (c.c < 0) {\n c.c += biff > 8 ? 0x4000 : 0x100;\n }\n }\n\n if (c.rRel && c.r < 0) {\n c = dup(c);\n\n while (c.r < 0) {\n c.r += biff > 8 ? 0x100000 : biff > 5 ? 0x10000 : 0x4000;\n }\n }\n\n var s = encode_cell(c);\n if (!c.cRel && c.cRel != null) s = fix_col(s);\n if (!c.rRel && c.rRel != null) s = fix_row(s);\n return s;\n }\n\n function encode_range_xls(r, opts) {\n if (r.s.r == 0 && !r.s.rRel) {\n if (r.e.r == (opts.biff >= 12 ? 0xFFFFF : opts.biff >= 8 ? 0x10000 : 0x4000) && !r.e.rRel) {\n return (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n }\n }\n\n if (r.s.c == 0 && !r.s.cRel) {\n if (r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n return (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n }\n }\n\n return encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n }\n\n var OFFCRYPTO = {};\n\n var make_offcrypto = function make_offcrypto(O, _crypto) {\n var crypto;\n if (typeof _crypto !== 'undefined') crypto = _crypto;else if (typeof require !== 'undefined') {\n try {\n crypto = require('crypto');\n } catch (e) {\n crypto = null;\n }\n }\n\n O.rc4 = function (key, data) {\n var S = new Array(256);\n var c = 0,\n i = 0,\n j = 0,\n t = 0;\n\n for (i = 0; i != 256; ++i) {\n S[i] = i;\n }\n\n for (i = 0; i != 256; ++i) {\n j = j + S[i] + key[i % key.length].charCodeAt(0) & 255;\n t = S[i];\n S[i] = S[j];\n S[j] = t;\n } // $FlowIgnore\n\n\n i = j = 0;\n var out = new_raw_buf(data.length);\n\n for (c = 0; c != data.length; ++c) {\n i = i + 1 & 255;\n j = (j + S[i]) % 256;\n t = S[i];\n S[i] = S[j];\n S[j] = t;\n out[c] = data[c] ^ S[S[i] + S[j] & 255];\n }\n\n return out;\n };\n\n O.md5 = function (hex) {\n if (!crypto) throw new Error(\"Unsupported crypto\");\n return crypto.createHash('md5').update(hex).digest('hex');\n };\n };\n /*global crypto:true */\n\n\n make_offcrypto(OFFCRYPTO, typeof crypto !== \"undefined\" ? crypto : undefined);\n\n function decode_row(rowstr) {\n return parseInt(unfix_row(rowstr), 10) - 1;\n }\n\n function encode_row(row) {\n return \"\" + (row + 1);\n }\n\n function fix_row(cstr) {\n return cstr.replace(/([A-Z]|^)(\\d+)$/, \"$1$$$2\");\n }\n\n function unfix_row(cstr) {\n return cstr.replace(/\\$(\\d+)$/, \"$1\");\n }\n\n function decode_col(colstr) {\n var c = unfix_col(colstr),\n d = 0,\n i = 0;\n\n for (; i !== c.length; ++i) {\n d = 26 * d + c.charCodeAt(i) - 64;\n }\n\n return d - 1;\n }\n\n function encode_col(col) {\n if (col < 0) throw new Error(\"invalid column \" + col);\n var s = \"\";\n\n for (++col; col; col = Math.floor((col - 1) / 26)) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s;\n }\n\n function fix_col(cstr) {\n return cstr.replace(/^([A-Z])/, \"$$$1\");\n }\n\n function unfix_col(cstr) {\n return cstr.replace(/^\\$([A-Z])/, \"$1\");\n }\n\n function split_cell(cstr) {\n return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/, \"$1,$2\").split(\",\");\n } //function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\n\n\n function decode_cell(cstr) {\n var R = 0,\n C = 0;\n\n for (var i = 0; i < cstr.length; ++i) {\n var cc = cstr.charCodeAt(i);\n if (cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);else if (cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n }\n\n return {\n c: C - 1,\n r: R - 1\n };\n } //function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }\n\n\n function encode_cell(cell) {\n var col = cell.c + 1;\n var s = \"\";\n\n for (; col; col = (col - 1) / 26 | 0) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s + (cell.r + 1);\n }\n\n function decode_range(range) {\n var idx = range.indexOf(\":\");\n if (idx == -1) return {\n s: decode_cell(range),\n e: decode_cell(range)\n };\n return {\n s: decode_cell(range.slice(0, idx)),\n e: decode_cell(range.slice(idx + 1))\n };\n }\n\n function encode_range(cs, ce) {\n if (typeof ce === 'undefined' || typeof ce === 'number') {\n return encode_range(cs.s, cs.e);\n }\n\n if (typeof cs !== 'string') cs = encode_cell(cs);\n if (typeof ce !== 'string') ce = encode_cell(ce);\n return cs == ce ? cs : cs + \":\" + ce;\n }\n\n function safe_decode_range(range) {\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var idx = 0,\n i = 0,\n cc = 0;\n var len = range.length;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.s.c = --idx;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.s.r = --idx;\n\n if (i === len || range.charCodeAt(++i) === 58) {\n o.e.c = o.s.c;\n o.e.r = o.s.r;\n return o;\n }\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.e.c = --idx;\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.e.r = --idx;\n return o;\n }\n\n function safe_format_cell(cell, v) {\n var q = cell.t == 'd' && v instanceof Date;\n if (cell.z != null) try {\n return cell.w = SSF.format(cell.z, q ? datenum(v) : v);\n } catch (e) {}\n\n try {\n return cell.w = SSF.format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? datenum(v) : v);\n } catch (e) {\n return '' + v;\n }\n }\n\n function format_cell(cell, v, o) {\n if (cell == null || cell.t == null || cell.t == 'z') return \"\";\n if (cell.w !== undefined) return cell.w;\n if (cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n if (v == undefined) return safe_format_cell(cell, cell.v);\n return safe_format_cell(cell, v);\n }\n\n function sheet_to_workbook(sheet, opts) {\n var n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n var sheets = {};\n sheets[n] = sheet;\n return {\n SheetNames: [n],\n Sheets: sheets\n };\n }\n\n function sheet_add_aoa(_ws, data, opts) {\n var o = opts || {};\n var dense = _ws ? Array.isArray(_ws) : o.dense;\n if (DENSE != null && dense == null) dense = DENSE;\n var ws = _ws || (dense ? [] : {});\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n if (!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n }\n\n var range = {\n s: {\n c: 10000000,\n r: 10000000\n },\n e: {\n c: 0,\n r: 0\n }\n };\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.s.c = _range.s.c;\n range.s.r = _range.s.r;\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n if (_R == -1) range.e.r = _R = _range.e.r + 1;\n }\n\n for (var R = 0; R != data.length; ++R) {\n if (!data[R]) continue;\n if (!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\n for (var C = 0; C != data[R].length; ++C) {\n if (typeof data[R][C] === 'undefined') continue;\n var cell = {\n v: data[R][C]\n };\n\n var __R = _R + R,\n __C = _C + C;\n\n if (range.s.r > __R) range.s.r = __R;\n if (range.s.c > __C) range.s.c = __C;\n if (range.e.r < __R) range.e.r = __R;\n if (range.e.c < __C) range.e.c = __C;\n if (data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];else {\n if (Array.isArray(cell.v)) {\n cell.f = data[R][C][1];\n cell.v = cell.v[0];\n }\n\n if (cell.v === null) {\n if (cell.f) cell.t = 'n';else if (!o.sheetStubs) continue;else cell.t = 'z';\n } else if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {\n cell.z = o.dateNF || SSF._table[14];\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.w = SSF.format(cell.z, datenum(cell.v));\n } else {\n cell.t = 'n';\n cell.v = datenum(cell.v);\n cell.w = SSF.format(cell.z, cell.v);\n }\n } else cell.t = 's';\n }\n\n if (dense) {\n if (!ws[__R]) ws[__R] = [];\n if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n ws[__R][__C] = cell;\n } else {\n var cell_ref = encode_cell({\n c: __C,\n r: __R\n });\n if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n ws[cell_ref] = cell;\n }\n }\n }\n\n if (range.s.c < 10000000) ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function aoa_to_sheet(data, opts) {\n return sheet_add_aoa(null, data, opts);\n }\n\n function write_UInt32LE(x, o) {\n if (!o) o = new_buf(4);\n o.write_shift(4, x);\n return o;\n }\n /* [MS-XLSB] 2.5.168 */\n\n\n function parse_XLWideString(data) {\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n }\n\n function write_XLWideString(data, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(4 + 2 * data.length);\n }\n\n o.write_shift(4, data.length);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.91 */\n //function parse_LPWideString(data) {\n //\tvar cchCharacters = data.read_shift(2);\n //\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n //}\n\n /* [MS-XLSB] 2.5.143 */\n\n\n function parse_StrRun(data) {\n return {\n ich: data.read_shift(2),\n ifnt: data.read_shift(2)\n };\n }\n\n function write_StrRun(run, o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, run.ich || 0);\n o.write_shift(2, run.ifnt || 0);\n return o;\n }\n /* [MS-XLSB] 2.5.121 */\n\n\n function parse_RichStr(data, length) {\n var start = data.l;\n var flags = data.read_shift(1);\n var str = parse_XLWideString(data);\n var rgsStrRun = [];\n var z = {\n t: str,\n h: str\n };\n\n if ((flags & 1) !== 0) {\n /* fRichStr */\n\n /* TODO: formatted string */\n var dwSizeStrRun = data.read_shift(4);\n\n for (var i = 0; i != dwSizeStrRun; ++i) {\n rgsStrRun.push(parse_StrRun(data));\n }\n\n z.r = rgsStrRun;\n } else z.r = [{\n ich: 0,\n ifnt: 0\n }]; //if((flags & 2) !== 0) { /* fExtStr */\n //\t/* TODO: phonetic string */\n //}\n\n\n data.l = start + length;\n return z;\n }\n\n function write_RichStr(str, o) {\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(15 + 4 * str.t.length);\n }\n\n o.write_shift(1, 0);\n write_XLWideString(str.t, o);\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\n\n\n var parse_BrtCommentText = parse_RichStr;\n\n function write_BrtCommentText(str, o) {\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(23 + 4 * str.t.length);\n }\n\n o.write_shift(1, 1);\n write_XLWideString(str.t, o);\n o.write_shift(4, 1);\n write_StrRun({\n ich: 0,\n ifnt: 0\n }, o);\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.9 */\n\n\n function parse_XLSBCell(data) {\n var col = data.read_shift(4);\n var iStyleRef = data.read_shift(2);\n iStyleRef += data.read_shift(1) << 16;\n data.l++; //var fPhShow = data.read_shift(1);\n\n return {\n c: col,\n iStyleRef: iStyleRef\n };\n }\n\n function write_XLSBCell(cell, o) {\n if (o == null) o = new_buf(8);\n o.write_shift(-4, cell.c);\n o.write_shift(3, cell.iStyleRef || cell.s);\n o.write_shift(1, 0);\n /* fPhShow */\n\n return o;\n }\n /* [MS-XLSB] 2.5.21 */\n\n\n var parse_XLSBCodeName = parse_XLWideString;\n var write_XLSBCodeName = write_XLWideString;\n /* [MS-XLSB] 2.5.166 */\n\n function parse_XLNullableWideString(data) {\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n }\n\n function write_XLNullableWideString(data, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(127);\n }\n\n o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.5.165 */\n\n\n var parse_XLNameWideString = parse_XLWideString; //var write_XLNameWideString = write_XLWideString;\n\n /* [MS-XLSB] 2.5.114 */\n\n var parse_RelID = parse_XLNullableWideString;\n var write_RelID = write_XLNullableWideString;\n /* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\n\n function parse_RkNumber(data) {\n var b = data.slice(data.l, data.l + 4);\n var fX100 = b[0] & 1,\n fInt = b[0] & 2;\n data.l += 4;\n b[0] &= 0xFC; // b[0] &= ~3;\n\n var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n return fX100 ? RK / 100 : RK;\n }\n\n function write_RkNumber(data, o) {\n if (o == null) o = new_buf(4);\n var fX100 = 0,\n fInt = 0,\n d100 = data * 100;\n\n if (data == (data | 0) && data >= -(1 << 29) && data < 1 << 29) {\n fInt = 1;\n } else if (d100 == (d100 | 0) && d100 >= -(1 << 29) && d100 < 1 << 29) {\n fInt = 1;\n fX100 = 1;\n }\n\n if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));else throw new Error(\"unsupported RkNumber \" + data); // TODO\n }\n /* [MS-XLSB] 2.5.117 RfX */\n\n\n function parse_RfX(data) {\n var cell = {\n s: {},\n e: {}\n };\n cell.s.r = data.read_shift(4);\n cell.e.r = data.read_shift(4);\n cell.s.c = data.read_shift(4);\n cell.e.c = data.read_shift(4);\n return cell;\n }\n\n function write_RfX(r, o) {\n if (!o) o = new_buf(16);\n o.write_shift(4, r.s.r);\n o.write_shift(4, r.e.r);\n o.write_shift(4, r.s.c);\n o.write_shift(4, r.e.c);\n return o;\n }\n /* [MS-XLSB] 2.5.153 UncheckedRfX */\n\n\n var parse_UncheckedRfX = parse_RfX;\n var write_UncheckedRfX = write_RfX;\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) {\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\n /* TODO: error checking, NaN and Infinity values are not valid Xnum */\n\n function parse_Xnum(data) {\n return data.read_shift(8, 'f');\n }\n\n function write_Xnum(data, o) {\n return (o || new_buf(8)).write_shift(8, data, 'f');\n }\n /* [MS-XLSB] 2.4.324 BrtColor */\n\n\n function parse_BrtColor(data) {\n var out = {};\n var d = data.read_shift(1); //var fValidRGB = d & 1;\n\n var xColorType = d >>> 1;\n var index = data.read_shift(1);\n var nTS = data.read_shift(2, 'i');\n var bR = data.read_shift(1);\n var bG = data.read_shift(1);\n var bB = data.read_shift(1);\n data.l++; //var bAlpha = data.read_shift(1);\n\n switch (xColorType) {\n case 0:\n out.auto = 1;\n break;\n\n case 1:\n out.index = index;\n var icv = XLSIcv[index];\n /* automatic pseudo index 81 */\n\n if (icv) out.rgb = rgb2Hex(icv);\n break;\n\n case 2:\n /* if(!fValidRGB) throw new Error(\"invalid\"); */\n out.rgb = rgb2Hex([bR, bG, bB]);\n break;\n\n case 3:\n out.theme = index;\n break;\n }\n\n if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n return out;\n }\n\n function write_BrtColor(color, o) {\n if (!o) o = new_buf(8);\n\n if (!color || color.auto) {\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n\n if (color.index != null) {\n o.write_shift(1, 0x02);\n o.write_shift(1, color.index);\n } else if (color.theme != null) {\n o.write_shift(1, 0x06);\n o.write_shift(1, color.theme);\n } else {\n o.write_shift(1, 0x05);\n o.write_shift(1, 0);\n }\n\n var nTS = color.tint || 0;\n if (nTS > 0) nTS *= 32767;else if (nTS < 0) nTS *= 32768;\n o.write_shift(2, nTS);\n\n if (!color.rgb || color.theme != null) {\n o.write_shift(2, 0);\n o.write_shift(1, 0);\n o.write_shift(1, 0);\n } else {\n var rgb = color.rgb || 'FFFFFF';\n if (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n o.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n o.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n o.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n o.write_shift(1, 0xFF);\n }\n\n return o;\n }\n /* [MS-XLSB] 2.5.52 */\n\n\n function parse_FontFlags(data) {\n var d = data.read_shift(1);\n data.l++;\n var out = {\n fBold: d & 0x01,\n fItalic: d & 0x02,\n fUnderline: d & 0x04,\n fStrikeout: d & 0x08,\n fOutline: d & 0x10,\n fShadow: d & 0x20,\n fCondense: d & 0x40,\n fExtend: d & 0x80\n };\n return out;\n }\n\n function write_FontFlags(font, o) {\n if (!o) o = new_buf(2);\n var grbit = (font.italic ? 0x02 : 0) | (font.strike ? 0x08 : 0) | (font.outline ? 0x10 : 0) | (font.shadow ? 0x20 : 0) | (font.condense ? 0x40 : 0) | (font.extend ? 0x80 : 0);\n o.write_shift(1, grbit);\n o.write_shift(1, 0);\n return o;\n }\n /* [MS-OLEDS] 2.3.1 and 2.3.2 */\n\n\n function parse_ClipboardFormatOrString(o, w) {\n // $FlowIgnore\n var ClipFmt = {\n 2: \"BITMAP\",\n 3: \"METAFILEPICT\",\n 8: \"DIB\",\n 14: \"ENHMETAFILE\"\n };\n var m = o.read_shift(4);\n\n switch (m) {\n case 0x00000000:\n return \"\";\n\n case 0xffffffff:\n case 0xfffffffe:\n return ClipFmt[o.read_shift(4)] || \"\";\n }\n\n if (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n o.l -= 4;\n return o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n }\n\n function parse_ClipboardFormatOrAnsiString(o) {\n return parse_ClipboardFormatOrString(o, 1);\n }\n\n function parse_ClipboardFormatOrUnicodeString(o) {\n return parse_ClipboardFormatOrString(o, 2);\n }\n /* [MS-OLEPS] 2.2 PropertyType */\n //var VT_EMPTY = 0x0000;\n //var VT_NULL = 0x0001;\n\n\n var VT_I2 = 0x0002;\n var VT_I4 = 0x0003; //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;\n\n var VT_BOOL = 0x000B;\n var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E;\n //var VT_I1 = 0x0010;\n //var VT_UI1 = 0x0011;\n //var VT_UI2 = 0x0012;\n\n var VT_UI4 = 0x0013; //var VT_I8 = 0x0014;\n //var VT_UI8 = 0x0015;\n //var VT_INT = 0x0016;\n //var VT_UINT = 0x0017;\n\n var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F;\n\n var VT_FILETIME = 0x0040;\n var VT_BLOB = 0x0041; //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;\n\n var VT_CF = 0x0047; //var VT_CLSID = 0x0048;\n //var VT_VERSIONED_STREAM = 0x0049;\n\n var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000;\n\n var VT_STRING = 0x0050; // 2.3.3.1.11 VtString\n\n var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\n\n var VT_CUSTOM = [VT_STRING, VT_USTR];\n /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\n\n var DocSummaryPIDDSI = {\n 0x01: {\n n: 'CodePage',\n t: VT_I2\n },\n 0x02: {\n n: 'Category',\n t: VT_STRING\n },\n 0x03: {\n n: 'PresentationFormat',\n t: VT_STRING\n },\n 0x04: {\n n: 'ByteCount',\n t: VT_I4\n },\n 0x05: {\n n: 'LineCount',\n t: VT_I4\n },\n 0x06: {\n n: 'ParagraphCount',\n t: VT_I4\n },\n 0x07: {\n n: 'SlideCount',\n t: VT_I4\n },\n 0x08: {\n n: 'NoteCount',\n t: VT_I4\n },\n 0x09: {\n n: 'HiddenCount',\n t: VT_I4\n },\n 0x0a: {\n n: 'MultimediaClipCount',\n t: VT_I4\n },\n 0x0b: {\n n: 'ScaleCrop',\n t: VT_BOOL\n },\n 0x0c: {\n n: 'HeadingPairs',\n t: VT_VECTOR | VT_VARIANT\n },\n 0x0d: {\n n: 'TitlesOfParts',\n t: VT_VECTOR | VT_LPSTR\n },\n 0x0e: {\n n: 'Manager',\n t: VT_STRING\n },\n 0x0f: {\n n: 'Company',\n t: VT_STRING\n },\n 0x10: {\n n: 'LinksUpToDate',\n t: VT_BOOL\n },\n 0x11: {\n n: 'CharacterCount',\n t: VT_I4\n },\n 0x13: {\n n: 'SharedDoc',\n t: VT_BOOL\n },\n 0x16: {\n n: 'HyperlinksChanged',\n t: VT_BOOL\n },\n 0x17: {\n n: 'AppVersion',\n t: VT_I4,\n p: 'version'\n },\n 0x18: {\n n: 'DigSig',\n t: VT_BLOB\n },\n 0x1A: {\n n: 'ContentType',\n t: VT_STRING\n },\n 0x1B: {\n n: 'ContentStatus',\n t: VT_STRING\n },\n 0x1C: {\n n: 'Language',\n t: VT_STRING\n },\n 0x1D: {\n n: 'Version',\n t: VT_STRING\n },\n 0xFF: {}\n };\n /* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\n\n var SummaryPIDSI = {\n 0x01: {\n n: 'CodePage',\n t: VT_I2\n },\n 0x02: {\n n: 'Title',\n t: VT_STRING\n },\n 0x03: {\n n: 'Subject',\n t: VT_STRING\n },\n 0x04: {\n n: 'Author',\n t: VT_STRING\n },\n 0x05: {\n n: 'Keywords',\n t: VT_STRING\n },\n 0x06: {\n n: 'Comments',\n t: VT_STRING\n },\n 0x07: {\n n: 'Template',\n t: VT_STRING\n },\n 0x08: {\n n: 'LastAuthor',\n t: VT_STRING\n },\n 0x09: {\n n: 'RevNumber',\n t: VT_STRING\n },\n 0x0A: {\n n: 'EditTime',\n t: VT_FILETIME\n },\n 0x0B: {\n n: 'LastPrinted',\n t: VT_FILETIME\n },\n 0x0C: {\n n: 'CreatedDate',\n t: VT_FILETIME\n },\n 0x0D: {\n n: 'ModifiedDate',\n t: VT_FILETIME\n },\n 0x0E: {\n n: 'PageCount',\n t: VT_I4\n },\n 0x0F: {\n n: 'WordCount',\n t: VT_I4\n },\n 0x10: {\n n: 'CharCount',\n t: VT_I4\n },\n 0x11: {\n n: 'Thumbnail',\n t: VT_CF\n },\n 0x12: {\n n: 'Application',\n t: VT_STRING\n },\n 0x13: {\n n: 'DocSecurity',\n t: VT_I4\n },\n 0xFF: {}\n };\n /* [MS-OLEPS] 2.18 */\n\n var SpecialProperties = {\n 0x80000000: {\n n: 'Locale',\n t: VT_UI4\n },\n 0x80000003: {\n n: 'Behavior',\n t: VT_UI4\n },\n 0x72627262: {}\n };\n\n (function () {\n for (var y in SpecialProperties) {\n if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\n }\n })();\n\n var DocSummaryRE = evert_key(DocSummaryPIDDSI, \"n\");\n var SummaryRE = evert_key(SummaryPIDSI, \"n\");\n /* [MS-XLS] 2.4.63 Country/Region codes */\n\n var CountryEnum = {\n 0x0001: \"US\",\n // United States\n 0x0002: \"CA\",\n // Canada\n 0x0003: \"\",\n // Latin America (except Brazil)\n 0x0007: \"RU\",\n // Russia\n 0x0014: \"EG\",\n // Egypt\n 0x001E: \"GR\",\n // Greece\n 0x001F: \"NL\",\n // Netherlands\n 0x0020: \"BE\",\n // Belgium\n 0x0021: \"FR\",\n // France\n 0x0022: \"ES\",\n // Spain\n 0x0024: \"HU\",\n // Hungary\n 0x0027: \"IT\",\n // Italy\n 0x0029: \"CH\",\n // Switzerland\n 0x002B: \"AT\",\n // Austria\n 0x002C: \"GB\",\n // United Kingdom\n 0x002D: \"DK\",\n // Denmark\n 0x002E: \"SE\",\n // Sweden\n 0x002F: \"NO\",\n // Norway\n 0x0030: \"PL\",\n // Poland\n 0x0031: \"DE\",\n // Germany\n 0x0034: \"MX\",\n // Mexico\n 0x0037: \"BR\",\n // Brazil\n 0x003d: \"AU\",\n // Australia\n 0x0040: \"NZ\",\n // New Zealand\n 0x0042: \"TH\",\n // Thailand\n 0x0051: \"JP\",\n // Japan\n 0x0052: \"KR\",\n // Korea\n 0x0054: \"VN\",\n // Viet Nam\n 0x0056: \"CN\",\n // China\n 0x005A: \"TR\",\n // Turkey\n 0x0069: \"JS\",\n // Ramastan\n 0x00D5: \"DZ\",\n // Algeria\n 0x00D8: \"MA\",\n // Morocco\n 0x00DA: \"LY\",\n // Libya\n 0x015F: \"PT\",\n // Portugal\n 0x0162: \"IS\",\n // Iceland\n 0x0166: \"FI\",\n // Finland\n 0x01A4: \"CZ\",\n // Czech Republic\n 0x0376: \"TW\",\n // Taiwan\n 0x03C1: \"LB\",\n // Lebanon\n 0x03C2: \"JO\",\n // Jordan\n 0x03C3: \"SY\",\n // Syria\n 0x03C4: \"IQ\",\n // Iraq\n 0x03C5: \"KW\",\n // Kuwait\n 0x03C6: \"SA\",\n // Saudi Arabia\n 0x03CB: \"AE\",\n // United Arab Emirates\n 0x03CC: \"IL\",\n // Israel\n 0x03CE: \"QA\",\n // Qatar\n 0x03D5: \"IR\",\n // Iran\n 0xFFFF: \"US\" // United States\n\n };\n /* [MS-XLS] 2.5.127 */\n\n var XLSFillPattern = [null, 'solid', 'mediumGray', 'darkGray', 'lightGray', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'gray125', 'gray0625'];\n\n function rgbify(arr) {\n return arr.map(function (x) {\n return [x >> 16 & 255, x >> 8 & 255, x & 255];\n });\n }\n /* [MS-XLS] 2.5.161 */\n\n /* [MS-XLSB] 2.5.75 Icv */\n\n\n var _XLSIcv = rgbify([\n /* Color Constants */\n 0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF,\n /* Overridable Defaults */\n 0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080, 0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF, 0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF, 0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99, 0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696, 0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333,\n /* Other entries to appease BIFF8/12 */\n 0xFFFFFF,\n /* 0x40 icvForeground ?? */\n 0x000000,\n /* 0x41 icvBackground ?? */\n 0x000000,\n /* 0x42 icvFrame ?? */\n 0x000000,\n /* 0x43 icv3D ?? */\n 0x000000,\n /* 0x44 icv3DText ?? */\n 0x000000,\n /* 0x45 icv3DHilite ?? */\n 0x000000,\n /* 0x46 icv3DShadow ?? */\n 0x000000,\n /* 0x47 icvHilite ?? */\n 0x000000,\n /* 0x48 icvCtlText ?? */\n 0x000000,\n /* 0x49 icvCtlScrl ?? */\n 0x000000,\n /* 0x4A icvCtlInv ?? */\n 0x000000,\n /* 0x4B icvCtlBody ?? */\n 0x000000,\n /* 0x4C icvCtlFrame ?? */\n 0x000000,\n /* 0x4D icvCtlFore ?? */\n 0x000000,\n /* 0x4E icvCtlBack ?? */\n 0x000000,\n /* 0x4F icvCtlNeutral */\n 0x000000,\n /* 0x50 icvInfoBk ?? */\n 0x000000\n /* 0x51 icvInfoText ?? */\n ]);\n\n var XLSIcv = dup(_XLSIcv);\n /* [MS-XLSB] 2.5.97.2 */\n\n var BErr = {\n 0x00: \"#NULL!\",\n 0x07: \"#DIV/0!\",\n 0x0F: \"#VALUE!\",\n 0x17: \"#REF!\",\n 0x1D: \"#NAME?\",\n 0x24: \"#NUM!\",\n 0x2A: \"#N/A\",\n 0x2B: \"#GETTING_DATA\",\n 0xFF: \"#WTF?\"\n };\n var RBErr = evert_num(BErr);\n /* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n\n /* 12.3 Part Summary */\n\n /* 14.2 Part Summary */\n\n /* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\n\n var ct2type\n /*{[string]:string}*/\n = {\n /* Workbook */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\n /* Worksheet */\n \"application/vnd.ms-excel.binIndexWs\": \"TODO\",\n\n /* Binary Index */\n\n /* Macrosheet */\n \"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n \"application/vnd.ms-excel.binIndexMs\": \"TODO\",\n\n /* Binary Index */\n\n /* File Properties */\n \"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n /* Custom Data Properties */\n \"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n /* PivotTable */\n \"application/vnd.ms-excel.pivotTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n /* Chart Objects */\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n /* Chart Colors */\n \"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n /* Chart Style */\n \"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n /* Chart Advanced */\n \"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n /* Calculation Chain */\n \"application/vnd.ms-excel.calcChain\": \"calcchains\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n /* Printer Settings */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n /* ActiveX */\n \"application/vnd.ms-office.activeX\": \"TODO\",\n \"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n /* Custom Toolbars */\n \"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n /* External Data Connections */\n \"application/vnd.ms-excel.connections\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n /* External Links */\n \"application/vnd.ms-excel.externalLink\": \"links\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n /* Metadata */\n \"application/vnd.ms-excel.sheetMetadata\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"TODO\",\n\n /* PivotCache */\n \"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n \"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n /* Query Table */\n \"application/vnd.ms-excel.queryTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n /* Shared Workbook */\n \"application/vnd.ms-excel.userNames\": \"TODO\",\n \"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n \"application/vnd.ms-excel.revisionLog\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n /* Single Cell Table */\n \"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n /* Slicer */\n \"application/vnd.ms-excel.slicer\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache\": \"TODO\",\n \"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n /* Sort Map */\n \"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n /* Table */\n \"application/vnd.ms-excel.table\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n /* Themes */\n \"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n /* Theme Override */\n \"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n /* Timeline */\n \"application/vnd.ms-excel.Timeline+xml\": \"TODO\",\n\n /* verify */\n \"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\",\n\n /* verify */\n\n /* VBA */\n \"application/vnd.ms-office.vbaProject\": \"vba\",\n \"application/vnd.ms-office.vbaProjectSignature\": \"vba\",\n\n /* Volatile Dependencies */\n \"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n /* Control Properties */\n \"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n /* Data Model */\n \"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n /* Survey */\n \"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n /* Drawing */\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n /* VML */\n \"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n \"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n \"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n /* Image */\n \"image/png\": \"TODO\",\n \"sheet\": \"js\"\n };\n\n var CT_LIST = function () {\n var o = {\n workbooks: {\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n xlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n xlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n xlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n xltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n },\n strs: {\n /* Shared Strings */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n xlsb: \"application/vnd.ms-excel.sharedStrings\"\n },\n comments: {\n /* Comments */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n xlsb: \"application/vnd.ms-excel.comments\"\n },\n sheets: {\n /* Worksheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n xlsb: \"application/vnd.ms-excel.worksheet\"\n },\n charts: {\n /* Chartsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n xlsb: \"application/vnd.ms-excel.chartsheet\"\n },\n dialogs: {\n /* Dialogsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n xlsb: \"application/vnd.ms-excel.dialogsheet\"\n },\n macros: {\n /* Macrosheet (Excel 4.0 Macros) */\n xlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n xlsb: \"application/vnd.ms-excel.macrosheet\"\n },\n styles: {\n /* Styles */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n xlsb: \"application/vnd.ms-excel.styles\"\n }\n };\n keys(o).forEach(function (k) {\n [\"xlsm\", \"xlam\"].forEach(function (v) {\n if (!o[k][v]) o[k][v] = o[k].xlsx;\n });\n });\n keys(o).forEach(function (k) {\n keys(o[k]).forEach(function (v) {\n ct2type[o[k][v]] = k;\n });\n });\n return o;\n }();\n\n var type2ct\n /*{[string]:Array}*/\n = evert_arr(ct2type);\n XMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\n\n function new_ct() {\n return {\n workbooks: [],\n sheets: [],\n charts: [],\n dialogs: [],\n macros: [],\n rels: [],\n strs: [],\n comments: [],\n links: [],\n coreprops: [],\n extprops: [],\n custprops: [],\n themes: [],\n styles: [],\n calcchains: [],\n vba: [],\n drawings: [],\n TODO: [],\n xmlns: \"\"\n };\n }\n\n function parse_ct(data) {\n var ct = new_ct();\n if (!data || !data.match) return ct;\n var ctext = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0].replace(nsregex, \"<\")) {\n case ' 0 ? ct.calcchains[0] : \"\";\n ct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n ct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n ct.defaults = ctext;\n delete ct.calcchains;\n return ct;\n }\n\n var CTYPE_XML_ROOT = writextag('Types', null, {\n 'xmlns': XMLNS.CT,\n 'xmlns:xsd': XMLNS.xsd,\n 'xmlns:xsi': XMLNS.xsi\n });\n var CTYPE_DEFAULTS = [['xml', 'application/xml'], ['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'], ['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'], ['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n /* from test files */\n ['bmp', 'image/bmp'], ['png', 'image/png'], ['gif', 'image/gif'], ['emf', 'image/x-emf'], ['wmf', 'image/x-wmf'], ['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'], ['tif', 'image/tiff'], ['tiff', 'image/tiff'], ['pdf', 'application/pdf'], ['rels', type2ct.rels[0]]].map(function (x) {\n return writextag('Default', null, {\n 'Extension': x[0],\n 'ContentType': x[1]\n });\n });\n\n function write_ct(ct, opts) {\n var o = [],\n v;\n o[o.length] = XML_HEADER;\n o[o.length] = CTYPE_XML_ROOT;\n o = o.concat(CTYPE_DEFAULTS);\n /* only write first instance */\n\n var f1 = function f1(w) {\n if (ct[w] && ct[w].length > 0) {\n v = ct[w][0];\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n });\n }\n };\n /* book type-specific */\n\n\n var f2 = function f2(w) {\n (ct[w] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n });\n });\n };\n /* standard type */\n\n\n var f3 = function f3(t) {\n (ct[t] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': type2ct[t][0]\n });\n });\n };\n\n f1('workbooks');\n f2('sheets');\n f2('charts');\n f3('themes');\n ['strs', 'styles'].forEach(f1);\n ['coreprops', 'extprops', 'custprops'].forEach(f3);\n f3('vba');\n f3('comments');\n f3('drawings');\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 9.3 Relationships */\n\n\n var RELS = {\n WB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n SHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n HLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n VML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n XPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n XMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n XLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n CXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n CXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n VBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n };\n /* 9.3.3 Representing Relationships */\n\n function get_rels_path(file) {\n var n = file.lastIndexOf(\"/\");\n return file.slice(0, n + 1) + '_rels/' + file.slice(n + 1) + \".rels\";\n }\n\n function parse_rels(data, currentFilePath) {\n var rels = {\n \"!id\": {}\n };\n if (!data) return rels;\n\n if (currentFilePath.charAt(0) !== '/') {\n currentFilePath = '/' + currentFilePath;\n }\n\n var hash = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n /* 9.3.2.2 OPC_Relationships */\n\n if (y[0] === ' 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n\n var RELS_EXTERN = [RELS.HLINK, RELS.XPATH, RELS.XMISS];\n\n function add_rels(rels, rId, f, type, relobj, targetmode) {\n if (!relobj) relobj = {};\n if (!rels['!id']) rels['!id'] = {};\n if (rId < 0) for (rId = 1; rels['!id']['rId' + rId]; ++rId) {\n /* empty */\n }\n relobj.Id = 'rId' + rId;\n relobj.Type = type;\n relobj.Target = f;\n if (targetmode) relobj.TargetMode = targetmode;else if (RELS_EXTERN.indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n if (rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n rels['!id'][relobj.Id] = relobj;\n rels[('/' + relobj.Target).replace(\"//\", \"/\")] = relobj;\n return rId;\n }\n /* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n\n /* Part 3 Section 4 Manifest File */\n\n\n var CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\n\n function parse_manifest(d, opts) {\n var str = xlml_normalize(d);\n var Rn;\n var FEtag;\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3]) {\n case 'manifest':\n break;\n // 4.2 \n\n case 'file-entry':\n // 4.3 \n FEtag = parsexmltag(Rn[0], false);\n if (FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n break;\n\n case 'encryption-data': // 4.4 \n\n case 'algorithm': // 4.5 \n\n case 'start-key-generation': // 4.6 \n\n case 'key-derivation':\n // 4.7 \n throw new Error(\"Unsupported ODS Encryption\");\n\n default:\n if (opts && opts.WTF) throw Rn;\n }\n }\n }\n\n function write_manifest(manifest) {\n var o = [XML_HEADER];\n o.push('\\n');\n o.push(' \\n');\n\n for (var i = 0; i < manifest.length; ++i) {\n o.push(' \\n');\n }\n\n o.push('');\n return o.join(\"\");\n }\n /* Part 3 Section 6 Metadata Manifest File */\n\n\n function write_rdf_type(file, res, tag) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n }\n\n function write_rdf_has(base, file) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n }\n\n function write_rdf(rdf) {\n var o = [XML_HEADER];\n o.push('\\n');\n\n for (var i = 0; i != rdf.length; ++i) {\n o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n o.push(write_rdf_has(\"\", rdf[i][0]));\n }\n\n o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n o.push('');\n return o.join(\"\");\n }\n /* TODO: pull properties */\n\n\n var write_meta_ods = function () {\n var payload = 'Sheet' + 'JS ' + XLSX.version + '';\n return function wmo() {\n return payload;\n };\n }();\n /* ECMA-376 Part II 11.1 Core Properties Part */\n\n /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\n var CORE_PROPS = [[\"cp:category\", \"Category\"], [\"cp:contentStatus\", \"ContentStatus\"], [\"cp:keywords\", \"Keywords\"], [\"cp:lastModifiedBy\", \"LastAuthor\"], [\"cp:lastPrinted\", \"LastPrinted\"], [\"cp:revision\", \"RevNumber\"], [\"cp:version\", \"Version\"], [\"dc:creator\", \"Author\"], [\"dc:description\", \"Comments\"], [\"dc:identifier\", \"Identifier\"], [\"dc:language\", \"Language\"], [\"dc:subject\", \"Subject\"], [\"dc:title\", \"Title\"], [\"dcterms:created\", \"CreatedDate\", 'date'], [\"dcterms:modified\", \"ModifiedDate\", 'date']];\n XMLNS.CORE_PROPS = \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\";\n RELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n\n var CORE_PROPS_REGEX = function () {\n var r = new Array(CORE_PROPS.length);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var g = \"(?:\" + f[0].slice(0, f[0].indexOf(\":\")) + \":)\" + f[0].slice(f[0].indexOf(\":\") + 1);\n r[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n }\n\n return r;\n }();\n\n function parse_core_props(data) {\n var p = {};\n data = utf8read(data);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i],\n cur = data.match(CORE_PROPS_REGEX[i]);\n if (cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n if (f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n }\n\n return p;\n }\n\n var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\n //'xmlns': XMLNS.CORE_PROPS,\n 'xmlns:cp': XMLNS.CORE_PROPS,\n 'xmlns:dc': XMLNS.dc,\n 'xmlns:dcterms': XMLNS.dcterms,\n 'xmlns:dcmitype': XMLNS.dcmitype,\n 'xmlns:xsi': XMLNS.xsi\n });\n\n function cp_doit(f, g, h, o, p) {\n if (p[f] != null || g == null || g === \"\") return;\n p[f] = g;\n g = escapexml(g);\n o[o.length] = h ? writextag(f, g, h) : writetag(f, g);\n }\n\n function write_core_props(cp, _opts) {\n var opts = _opts || {};\n var o = [XML_HEADER, CORE_PROPS_XML_ROOT],\n p = {};\n if (!cp && !opts.Props) return o.join(\"\");\n\n if (cp) {\n if (cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n if (cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n }\n\n for (var i = 0; i != CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n if (v === true) v = \"1\";else if (v === false) v = \"0\";else if (typeof v == \"number\") v = String(v);\n if (v != null) cp_doit(f[0], v, null, o, p);\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 15.2.12.3 Extended File Properties Part */\n\n /* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\n var EXT_PROPS = [[\"Application\", \"Application\", \"string\"], [\"AppVersion\", \"AppVersion\", \"string\"], [\"Company\", \"Company\", \"string\"], [\"DocSecurity\", \"DocSecurity\", \"string\"], [\"Manager\", \"Manager\", \"string\"], [\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"], [\"SharedDoc\", \"SharedDoc\", \"bool\"], [\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"], [\"ScaleCrop\", \"ScaleCrop\", \"bool\"], [\"HeadingPairs\", \"HeadingPairs\", \"raw\"], [\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]];\n XMLNS.EXT_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\";\n RELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n var PseudoPropsPairs = [\"Worksheets\", \"SheetNames\", \"NamedRanges\", \"DefinedNames\", \"Chartsheets\", \"ChartNames\"];\n\n function load_props_pairs(HP, TOP, props, opts) {\n var v = [];\n if (typeof HP == \"string\") v = parseVector(HP, opts);else for (var j = 0; j < HP.length; ++j) {\n v = v.concat(HP[j].map(function (hp) {\n return {\n v: hp\n };\n }));\n }\n var parts = typeof TOP == \"string\" ? parseVector(TOP, opts).map(function (x) {\n return x.v;\n }) : TOP;\n var idx = 0,\n len = 0;\n if (parts.length > 0) for (var i = 0; i !== v.length; i += 2) {\n len = +v[i + 1].v;\n\n switch (v[i].v) {\n case \"Worksheets\":\n case \"工作表\":\n case \"Листы\":\n case \"أوراق العمل\":\n case \"ワークシート\":\n case \"גליונות עבודה\":\n case \"Arbeitsblätter\":\n case \"Çalışma Sayfaları\":\n case \"Feuilles de calcul\":\n case \"Fogli di lavoro\":\n case \"Folhas de cálculo\":\n case \"Planilhas\":\n case \"Regneark\":\n case \"Hojas de cálculo\":\n case \"Werkbladen\":\n props.Worksheets = len;\n props.SheetNames = parts.slice(idx, idx + len);\n break;\n\n case \"Named Ranges\":\n case \"Rangos con nombre\":\n case \"名前付き一覧\":\n case \"Benannte Bereiche\":\n case \"Navngivne områder\":\n props.NamedRanges = len;\n props.DefinedNames = parts.slice(idx, idx + len);\n break;\n\n case \"Charts\":\n case \"Diagramme\":\n props.Chartsheets = len;\n props.ChartNames = parts.slice(idx, idx + len);\n break;\n }\n\n idx += len;\n }\n }\n\n function parse_ext_props(data, p, opts) {\n var q = {};\n if (!p) p = {};\n data = utf8read(data);\n EXT_PROPS.forEach(function (f) {\n var xml = (data.match(matchtag(f[0])) || [])[1];\n\n switch (f[2]) {\n case \"string\":\n if (xml) p[f[1]] = unescapexml(xml);\n break;\n\n case \"bool\":\n p[f[1]] = xml === \"true\";\n break;\n\n case \"raw\":\n var cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n if (cur && cur.length > 0) q[f[1]] = cur[1];\n break;\n }\n });\n if (q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n return p;\n }\n\n var EXT_PROPS_XML_ROOT = writextag('Properties', null, {\n 'xmlns': XMLNS.EXT_PROPS,\n 'xmlns:vt': XMLNS.vt\n });\n\n function write_ext_props(cp) {\n var o = [],\n W = writextag;\n if (!cp) cp = {};\n cp.Application = \"SheetJS\";\n o[o.length] = XML_HEADER;\n o[o.length] = EXT_PROPS_XML_ROOT;\n EXT_PROPS.forEach(function (f) {\n if (cp[f[1]] === undefined) return;\n var v;\n\n switch (f[2]) {\n case 'string':\n v = escapexml(String(cp[f[1]]));\n break;\n\n case 'bool':\n v = cp[f[1]] ? 'true' : 'false';\n break;\n }\n\n if (v !== undefined) o[o.length] = W(f[0], v);\n });\n /* TODO: HeadingPairs, TitlesOfParts */\n\n o[o.length] = W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets') + W('vt:variant', W('vt:i4', String(cp.Worksheets))), {\n size: 2,\n baseType: \"variant\"\n }));\n o[o.length] = W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function (s) {\n return \"\" + escapexml(s) + \"\";\n }).join(\"\"), {\n size: cp.Worksheets,\n baseType: \"lpstr\"\n }));\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* 15.2.12.2 Custom File Properties Part */\n\n\n XMLNS.CUST_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\";\n RELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n var custregex = /<[^>]+>[^<]*/g;\n\n function parse_cust_props(data, opts) {\n var p = {},\n name = \"\";\n var m = data.match(custregex);\n if (m) for (var i = 0; i != m.length; ++i) {\n var x = m[i],\n y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n name = null;\n break;\n\n default:\n if (x.indexOf('');\n var type = toks[0].slice(4),\n text = toks[1];\n /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\n switch (type) {\n case 'lpstr':\n case 'bstr':\n case 'lpwstr':\n p[name] = unescapexml(text);\n break;\n\n case 'bool':\n p[name] = parsexmlbool(text);\n break;\n\n case 'i1':\n case 'i2':\n case 'i4':\n case 'i8':\n case 'int':\n case 'uint':\n p[name] = parseInt(text, 10);\n break;\n\n case 'r4':\n case 'r8':\n case 'decimal':\n p[name] = parseFloat(text);\n break;\n\n case 'filetime':\n case 'date':\n p[name] = parseDate(text);\n break;\n\n case 'cy':\n case 'error':\n p[name] = unescapexml(text);\n break;\n\n default:\n if (type.slice(-1) == '/') break;\n if (opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n }\n } else if (x.slice(0, 2) === \"\") {\n /* empty */\n } else if (opts.WTF) throw new Error(x);\n\n }\n }\n return p;\n }\n\n var CUST_PROPS_XML_ROOT = writextag('Properties', null, {\n 'xmlns': XMLNS.CUST_PROPS,\n 'xmlns:vt': XMLNS.vt\n });\n\n function write_cust_props(cp) {\n var o = [XML_HEADER, CUST_PROPS_XML_ROOT];\n if (!cp) return o.join(\"\");\n var pid = 1;\n keys(cp).forEach(function custprop(k) {\n ++pid;\n o[o.length] = writextag('property', write_vt(cp[k], true), {\n 'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\n 'pid': pid,\n 'name': escapexml(k)\n });\n });\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* Common Name -> XLML Name */\n\n\n var XLMLDocPropsMap = {\n Title: 'Title',\n Subject: 'Subject',\n Author: 'Author',\n Keywords: 'Keywords',\n Comments: 'Description',\n LastAuthor: 'LastAuthor',\n RevNumber: 'Revision',\n Application: 'AppName',\n\n /* TotalTime: 'TotalTime', */\n LastPrinted: 'LastPrinted',\n CreatedDate: 'Created',\n ModifiedDate: 'LastSaved',\n\n /* Pages */\n\n /* Words */\n\n /* Characters */\n Category: 'Category',\n\n /* PresentationFormat */\n Manager: 'Manager',\n Company: 'Company',\n\n /* Guid */\n\n /* HyperlinkBase */\n\n /* Bytes */\n\n /* Lines */\n\n /* Paragraphs */\n\n /* CharactersWithSpaces */\n AppVersion: 'Version',\n ContentStatus: 'ContentStatus',\n\n /* NOTE: missing from schema */\n Identifier: 'Identifier',\n\n /* NOTE: missing from schema */\n Language: 'Language'\n /* NOTE: missing from schema */\n\n };\n var evert_XLMLDPM = evert(XLMLDocPropsMap);\n\n function xlml_set_prop(Props, tag, val) {\n tag = evert_XLMLDPM[tag] || tag;\n Props[tag] = val;\n }\n\n function xlml_write_docprops(Props, opts) {\n var o = [];\n keys(XLMLDocPropsMap).map(function (m) {\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n }\n\n throw m;\n }).forEach(function (p) {\n if (Props[p[1]] == null) return;\n var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\n switch (p[2]) {\n case 'date':\n m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"Z\");\n break;\n }\n\n if (typeof m == 'number') m = String(m);else if (m === true || m === false) {\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"\");\n o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n });\n return writextag('DocumentProperties', o.join(\"\"), {\n xmlns: XLMLNS.o\n });\n }\n\n function xlml_write_custprops(Props, Custprops) {\n var BLACKLIST = [\"Worksheets\", \"SheetNames\"];\n var T = 'CustomDocumentProperties';\n var o = [];\n if (Props) keys(Props).forEach(function (k) {\n if (!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (k == CORE_PROPS[i][1]) return;\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (k == EXT_PROPS[i][1]) return;\n }\n\n for (i = 0; i < BLACKLIST.length; ++i) {\n if (k == BLACKLIST[i]) return;\n }\n\n var m = Props[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n if (Custprops) keys(Custprops).forEach(function (k) {\n if (!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n if (Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n var m = Custprops[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) {\n t = \"dateTime.tz\";\n m = m.toISOString();\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n return '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '' + T + '>';\n }\n /* [MS-DTYP] 2.3.3 FILETIME */\n\n /* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n\n /* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\n\n\n function parse_FILETIME(blob) {\n var dwLowDateTime = blob.read_shift(4),\n dwHighDateTime = blob.read_shift(4);\n return new Date((dwHighDateTime / 1e7 * Math.pow(2, 32) + dwLowDateTime / 1e7 - 11644473600) * 1000).toISOString().replace(/\\.000/, \"\");\n }\n\n function write_FILETIME(time) {\n var date = typeof time == \"string\" ? new Date(Date.parse(time)) : time;\n var t = date.getTime() / 1000 + 11644473600;\n var l = t % Math.pow(2, 32),\n h = (t - l) / Math.pow(2, 32);\n l *= 1e7;\n h *= 1e7;\n var w = l / Math.pow(2, 32) | 0;\n\n if (w > 0) {\n l = l % Math.pow(2, 32);\n h += w;\n }\n\n var o = new_buf(8);\n o.write_shift(4, l);\n o.write_shift(4, h);\n return o;\n }\n /* [MS-OSHARED] 2.3.3.1.4 Lpstr */\n\n\n function parse_lpstr(blob, type, pad) {\n var start = blob.l;\n var str = blob.read_shift(0, 'lpstr-cp');\n if (pad) while (blob.l - start & 3) {\n ++blob.l;\n }\n return str;\n }\n /* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\n\n\n function parse_lpwstr(blob, type, pad) {\n var str = blob.read_shift(0, 'lpwstr');\n if (pad) blob.l += 4 - (str.length + 1 & 3) & 3;\n return str;\n }\n /* [MS-OSHARED] 2.3.3.1.11 VtString */\n\n /* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\n\n\n function parse_VtStringBase(blob, stringType, pad) {\n if (stringType === 0x1F\n /*VT_LPWSTR*/\n ) return parse_lpwstr(blob);\n return parse_lpstr(blob, stringType, pad);\n }\n\n function parse_VtString(blob, t, pad) {\n return parse_VtStringBase(blob, t, pad === false ? 0 : 4);\n }\n\n function parse_VtUnalignedString(blob, t) {\n if (!t) throw new Error(\"VtUnalignedString must have positive length\");\n return parse_VtStringBase(blob, t, 0);\n }\n /* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\n\n\n function parse_VtVecUnalignedLpstrValue(blob) {\n var length = blob.read_shift(4);\n var ret = [];\n\n for (var i = 0; i != length; ++i) {\n ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0, '');\n }\n\n return ret;\n }\n /* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */\n\n\n function parse_VtVecUnalignedLpstr(blob) {\n return parse_VtVecUnalignedLpstrValue(blob);\n }\n /* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\n\n\n function parse_VtHeadingPair(blob) {\n var headingString = parse_TypedPropertyValue(blob, VT_USTR);\n var headerParts = parse_TypedPropertyValue(blob, VT_I4);\n return [headingString, headerParts];\n }\n /* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\n\n\n function parse_VtVecHeadingPairValue(blob) {\n var cElements = blob.read_shift(4);\n var out = [];\n\n for (var i = 0; i != cElements / 2; ++i) {\n out.push(parse_VtHeadingPair(blob));\n }\n\n return out;\n }\n /* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */\n\n\n function parse_VtVecHeadingPair(blob) {\n // NOTE: When invoked, wType & padding were already consumed\n return parse_VtVecHeadingPairValue(blob);\n }\n /* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\n\n\n function parse_dictionary(blob, CodePage) {\n var cnt = blob.read_shift(4);\n var dict = {};\n\n for (var j = 0; j != cnt; ++j) {\n var pid = blob.read_shift(4);\n var len = blob.read_shift(4);\n dict[pid] = blob.read_shift(len, CodePage === 0x4B0 ? 'utf16le' : 'utf8').replace(chr0, '').replace(chr1, '!');\n if (CodePage === 0x4B0 && len % 2) blob.l += 2;\n }\n\n if (blob.l & 3) blob.l = blob.l >> 2 + 1 << 2;\n return dict;\n }\n /* [MS-OLEPS] 2.9 BLOB */\n\n\n function parse_BLOB(blob) {\n var size = blob.read_shift(4);\n var bytes = blob.slice(blob.l, blob.l + size);\n blob.l += size;\n if ((size & 3) > 0) blob.l += 4 - (size & 3) & 3;\n return bytes;\n }\n /* [MS-OLEPS] 2.11 ClipboardData */\n\n\n function parse_ClipboardData(blob) {\n // TODO\n var o = {};\n o.Size = blob.read_shift(4); //o.Format = blob.read_shift(4);\n\n blob.l += o.Size + 3 - (o.Size - 1) % 4;\n return o;\n }\n /* [MS-OLEPS] 2.15 TypedPropertyValue */\n\n\n function parse_TypedPropertyValue(blob, type, _opts) {\n var t = blob.read_shift(2),\n ret,\n opts = _opts || {};\n blob.l += 2;\n if (type !== VT_VARIANT) if (t !== type && VT_CUSTOM.indexOf(type) === -1) throw new Error('Expected type ' + type + ' saw ' + t);\n\n switch (type === VT_VARIANT ? t : type) {\n case 0x02\n /*VT_I2*/\n :\n ret = blob.read_shift(2, 'i');\n if (!opts.raw) blob.l += 2;\n return ret;\n\n case 0x03\n /*VT_I4*/\n :\n ret = blob.read_shift(4, 'i');\n return ret;\n\n case 0x0B\n /*VT_BOOL*/\n :\n return blob.read_shift(4) !== 0x0;\n\n case 0x13\n /*VT_UI4*/\n :\n ret = blob.read_shift(4);\n return ret;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n return parse_lpstr(blob, t, 4).replace(chr0, '');\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n return parse_lpwstr(blob);\n\n case 0x40\n /*VT_FILETIME*/\n :\n return parse_FILETIME(blob);\n\n case 0x41\n /*VT_BLOB*/\n :\n return parse_BLOB(blob);\n\n case 0x47\n /*VT_CF*/\n :\n return parse_ClipboardData(blob);\n\n case 0x50\n /*VT_STRING*/\n :\n return parse_VtString(blob, t, !opts.raw).replace(chr0, '');\n\n case 0x51\n /*VT_USTR*/\n :\n return parse_VtUnalignedString(blob, t\n /*, 4*/\n ).replace(chr0, '');\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n return parse_VtVecHeadingPair(blob);\n\n case 0x101E\n /*VT_LPSTR*/\n :\n return parse_VtVecUnalignedLpstr(blob);\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n }\n }\n\n function write_TypedPropertyValue(type, value) {\n var o = new_buf(4),\n p = new_buf(4);\n o.write_shift(4, type == 0x50 ? 0x1F : type);\n\n switch (type) {\n case 0x03\n /*VT_I4*/\n :\n p.write_shift(-4, value);\n break;\n\n case 0x05\n /*VT_I4*/\n :\n p = new_buf(8);\n p.write_shift(8, value, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n p.write_shift(4, value ? 0x01 : 0x00);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n p = write_FILETIME(value);\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n case 0x50\n /*VT_STRING*/\n :\n p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n p.write_shift(4, value.length + 1);\n p.write_shift(0, value, \"dbcs\");\n\n while (p.l != p.length) {\n p.write_shift(1, 0);\n }\n\n break;\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n }\n\n return bconcat([o, p]);\n }\n /* [MS-OLEPS] 2.20 PropertySet */\n\n\n function parse_PropertySet(blob, PIDSI) {\n var start_addr = blob.l;\n var size = blob.read_shift(4);\n var NumProps = blob.read_shift(4);\n var Props = [],\n i = 0;\n var CodePage = 0;\n var Dictionary = -1,\n DictObj = {};\n\n for (i = 0; i != NumProps; ++i) {\n var PropID = blob.read_shift(4);\n var Offset = blob.read_shift(4);\n Props[i] = [PropID, Offset + start_addr];\n }\n\n Props.sort(function (x, y) {\n return x[1] - y[1];\n });\n var PropH = {};\n\n for (i = 0; i != NumProps; ++i) {\n if (blob.l !== Props[i][1]) {\n var fail = true;\n if (i > 0 && PIDSI) switch (PIDSI[Props[i - 1][0]].t) {\n case 0x02\n /*VT_I2*/\n :\n if (blob.l + 2 === Props[i][1]) {\n blob.l += 2;\n fail = false;\n }\n\n break;\n\n case 0x50\n /*VT_STRING*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n }\n\n if ((!PIDSI || i == 0) && blob.l <= Props[i][1]) {\n fail = false;\n blob.l = Props[i][1];\n }\n\n if (fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n }\n\n if (PIDSI) {\n var piddsi = PIDSI[Props[i][0]];\n PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {\n raw: true\n });\n if (piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n if (piddsi.n == \"CodePage\") switch (PropH[piddsi.n]) {\n case 0:\n PropH[piddsi.n] = 1252;\n\n /* falls through */\n\n case 874:\n case 932:\n case 936:\n case 949:\n case 950:\n case 1250:\n case 1251:\n case 1253:\n case 1254:\n case 1255:\n case 1256:\n case 1257:\n case 1258:\n case 10000:\n case 1200:\n case 1201:\n case 1252:\n case 65000:\n case -536:\n case 65001:\n case -535:\n set_cp(CodePage = PropH[piddsi.n] >>> 0 & 0xFFFF);\n break;\n\n default:\n throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n }\n } else {\n if (Props[i][0] === 0x1) {\n CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);\n set_cp(CodePage);\n\n if (Dictionary !== -1) {\n var oldpos = blob.l;\n blob.l = Props[Dictionary][1];\n DictObj = parse_dictionary(blob, CodePage);\n blob.l = oldpos;\n }\n } else if (Props[i][0] === 0) {\n if (CodePage === 0) {\n Dictionary = i;\n blob.l = Props[i + 1][1];\n continue;\n }\n\n DictObj = parse_dictionary(blob, CodePage);\n } else {\n var name = DictObj[Props[i][0]];\n var val;\n /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\n switch (blob[blob.l]) {\n case 0x41\n /*VT_BLOB*/\n :\n blob.l += 4;\n val = parse_BLOB(blob);\n break;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x03\n /*VT_I4*/\n :\n blob.l += 4;\n val = blob.read_shift(4, 'i');\n break;\n\n case 0x13\n /*VT_UI4*/\n :\n blob.l += 4;\n val = blob.read_shift(4);\n break;\n\n case 0x05\n /*VT_R8*/\n :\n blob.l += 4;\n val = blob.read_shift(8, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n blob.l += 4;\n val = parsebool(blob, 4);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n blob.l += 4;\n val = parseDate(parse_FILETIME(blob));\n break;\n\n default:\n throw new Error(\"unparsed value: \" + blob[blob.l]);\n }\n\n PropH[name] = val;\n }\n }\n }\n\n blob.l = start_addr + size;\n /* step ahead to skip padding */\n\n return PropH;\n }\n\n var XLSPSSkip = [\"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\"].concat(PseudoPropsPairs);\n\n function guess_property_type(val) {\n switch (typeof val) {\n case \"boolean\":\n return 0x0B;\n\n case \"number\":\n return (val | 0) == val ? 0x03 : 0x05;\n\n case \"string\":\n return 0x1F;\n\n case \"object\":\n if (val instanceof Date) return 0x40;\n break;\n }\n\n return -1;\n }\n\n function write_PropertySet(entries, RE, PIDSI) {\n var hdr = new_buf(8),\n piao = [],\n prop = [];\n var sz = 8,\n i = 0;\n var pr = new_buf(8),\n pio = new_buf(8);\n pr.write_shift(4, 0x0002);\n pr.write_shift(4, 0x04B0);\n pio.write_shift(4, 0x0001);\n prop.push(pr);\n piao.push(pio);\n sz += 8 + pr.length;\n\n if (!RE) {\n pio = new_buf(8);\n pio.write_shift(4, 0);\n piao.unshift(pio);\n var bufs = [new_buf(4)];\n bufs[0].write_shift(4, entries.length);\n\n for (i = 0; i < entries.length; ++i) {\n var value = entries[i][0];\n pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n pr.write_shift(4, i + 2);\n pr.write_shift(4, value.length + 1);\n pr.write_shift(0, value, \"dbcs\");\n\n while (pr.l != pr.length) {\n pr.write_shift(1, 0);\n }\n\n bufs.push(pr);\n }\n\n pr = bconcat(bufs);\n prop.unshift(pr);\n sz += 8 + pr.length;\n }\n\n for (i = 0; i < entries.length; ++i) {\n if (RE && !RE[entries[i][0]]) continue;\n if (XLSPSSkip.indexOf(entries[i][0]) > -1) continue;\n if (entries[i][1] == null) continue;\n var val = entries[i][1],\n idx = 0;\n\n if (RE) {\n idx = +RE[entries[i][0]];\n var pinfo = PIDSI[idx];\n\n if (pinfo.p == \"version\" && typeof val == \"string\") {\n var arr = val.split(\".\");\n val = (+arr[0] << 16) + (+arr[1] || 0);\n }\n\n pr = write_TypedPropertyValue(pinfo.t, val);\n } else {\n var T = guess_property_type(val);\n\n if (T == -1) {\n T = 0x1F;\n val = String(val);\n }\n\n pr = write_TypedPropertyValue(T, val);\n }\n\n prop.push(pr);\n pio = new_buf(8);\n pio.write_shift(4, !RE ? 2 + i : idx);\n piao.push(pio);\n sz += 8 + pr.length;\n }\n\n var w = 8 * (prop.length + 1);\n\n for (i = 0; i < prop.length; ++i) {\n piao[i].write_shift(4, w);\n w += prop[i].length;\n }\n\n hdr.write_shift(4, sz);\n hdr.write_shift(4, prop.length);\n return bconcat([hdr].concat(piao).concat(prop));\n }\n /* [MS-OLEPS] 2.21 PropertySetStream */\n\n\n function parse_PropertySetStream(file, PIDSI, clsid) {\n var blob = file.content;\n if (!blob) return {};\n prep_blob(blob, 0);\n var NumSets,\n FMTID0,\n FMTID1,\n Offset0,\n Offset1 = 0;\n blob.chk('feff', 'Byte Order: ');\n /*var vers = */\n\n blob.read_shift(2); // TODO: check version\n\n var SystemIdentifier = blob.read_shift(4);\n var CLSID = blob.read_shift(16);\n if (CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n NumSets = blob.read_shift(4);\n if (NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n FMTID0 = blob.read_shift(16);\n Offset0 = blob.read_shift(4);\n if (NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);else if (NumSets === 2) {\n FMTID1 = blob.read_shift(16);\n Offset1 = blob.read_shift(4);\n }\n var PSet0 = parse_PropertySet(blob, PIDSI);\n var rval = {\n SystemIdentifier: SystemIdentifier\n };\n\n for (var y in PSet0) {\n rval[y] = PSet0[y];\n } //rval.blob = blob;\n\n\n rval.FMTID = FMTID0; //rval.PSet0 = PSet0;\n\n if (NumSets === 1) return rval;\n if (Offset1 - blob.l == 2) blob.l += 2;\n if (blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n var PSet1;\n\n try {\n PSet1 = parse_PropertySet(blob, null);\n } catch (e) {\n /* empty */\n }\n\n for (y in PSet1) {\n rval[y] = PSet1[y];\n }\n\n rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\n return rval;\n }\n\n function write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) {\n var hdr = new_buf(entries2 ? 68 : 48);\n var bufs = [hdr];\n hdr.write_shift(2, 0xFFFE);\n hdr.write_shift(2, 0x0000);\n /* TODO: type 1 props */\n\n hdr.write_shift(4, 0x32363237);\n hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n hdr.write_shift(4, entries2 ? 2 : 1);\n hdr.write_shift(16, clsid, \"hex\");\n hdr.write_shift(4, entries2 ? 68 : 48);\n var ps0 = write_PropertySet(entries, RE, PIDSI);\n bufs.push(ps0);\n\n if (entries2) {\n var ps1 = write_PropertySet(entries2, null, null);\n hdr.write_shift(16, clsid2, \"hex\");\n hdr.write_shift(4, 68 + ps0.length);\n bufs.push(ps1);\n }\n\n return bconcat(bufs);\n }\n\n function parsenoop2(blob, length) {\n blob.read_shift(length);\n return null;\n }\n\n function writezeroes(n, o) {\n if (!o) o = new_buf(n);\n\n for (var j = 0; j < n; ++j) {\n o.write_shift(1, 0);\n }\n\n return o;\n }\n\n function parslurp(blob, length, cb) {\n var arr = [],\n target = blob.l + length;\n\n while (blob.l < target) {\n arr.push(cb(blob, target - blob.l));\n }\n\n if (target !== blob.l) throw new Error(\"Slurp error\");\n return arr;\n }\n\n function parsebool(blob, length) {\n return blob.read_shift(length) === 0x1;\n }\n\n function writebool(v, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, +!!v);\n return o;\n }\n\n function parseuint16(blob) {\n return blob.read_shift(2, 'u');\n }\n\n function writeuint16(v, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, v);\n return o;\n }\n\n function parseuint16a(blob, length) {\n return parslurp(blob, length, parseuint16);\n }\n /* --- 2.5 Structures --- */\n\n /* [MS-XLS] 2.5.10 Bes (boolean or error) */\n\n\n function parse_Bes(blob) {\n var v = blob.read_shift(1),\n t = blob.read_shift(1);\n return t === 0x01 ? v : v === 0x01;\n }\n\n function write_Bes(v, t, o) {\n if (!o) o = new_buf(2);\n o.write_shift(1, +v);\n o.write_shift(1, t == 'e' ? 1 : 0);\n return o;\n }\n /* [MS-XLS] 2.5.240 ShortXLUnicodeString */\n\n\n function parse_ShortXLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n var encoding = 'sbcs-cont';\n var cp = current_codepage;\n if (opts && opts.biff >= 8) current_codepage = 1200;\n\n if (!opts || opts.biff == 8) {\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte) {\n encoding = 'dbcs-cont';\n }\n } else if (opts.biff == 12) {\n encoding = 'wstr';\n }\n\n if (opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n var o = cch ? blob.read_shift(cch, encoding) : \"\";\n current_codepage = cp;\n return o;\n }\n /* 2.5.293 XLUnicodeRichExtendedString */\n\n\n function parse_XLUnicodeRichExtendedString(blob) {\n var cp = current_codepage;\n current_codepage = 1200;\n var cch = blob.read_shift(2),\n flags = blob.read_shift(1);\n var\n /*fHighByte = flags & 0x1,*/\n fExtSt = flags & 0x4,\n fRichSt = flags & 0x8;\n var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\n var cRun = 0,\n cbExtRst;\n var z = {};\n if (fRichSt) cRun = blob.read_shift(2);\n if (fExtSt) cbExtRst = blob.read_shift(4);\n var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n var msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n if (fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\n if (fExtSt) blob.l += cbExtRst; //TODO: parse this\n\n z.t = msg;\n\n if (!fRichSt) {\n z.raw = \"\" + z.t + \"\";\n z.r = z.t;\n }\n\n current_codepage = cp;\n return z;\n }\n\n function write_XLUnicodeRichExtendedString(xlstr) {\n var str = xlstr.t || \"\",\n nfmts = 1;\n var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n hdr.write_shift(2, str.length);\n hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n if (nfmts > 1) hdr.write_shift(2, nfmts);\n var otext = new_buf(2 * str.length);\n otext.write_shift(2 * str.length, str, 'utf16le');\n var out = [hdr, otext];\n return bconcat(out);\n }\n /* 2.5.296 XLUnicodeStringNoCch */\n\n\n function parse_XLUnicodeStringNoCch(blob, cch, opts) {\n var retval;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n if (opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n }\n\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte === 0) {\n retval = blob.read_shift(cch, 'sbcs-cont');\n } else {\n retval = blob.read_shift(cch, 'dbcs-cont');\n }\n\n return retval;\n }\n /* 2.5.294 XLUnicodeString */\n\n\n function parse_XLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return parse_XLUnicodeStringNoCch(blob, cch, opts);\n }\n /* BIFF5 override */\n\n\n function parse_XLUnicodeString2(blob, length, opts) {\n if (opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, opts.biff <= 4 || !blob.lens ? 'cpstr' : 'sbcs-cont');\n }\n /* TODO: BIFF5 and lower, codepage awareness */\n\n\n function write_XLUnicodeString(str, opts, o) {\n if (!o) o = new_buf(3 + 2 * str.length);\n o.write_shift(2, str.length);\n o.write_shift(1, 1);\n o.write_shift(31, str, 'utf16le');\n return o;\n }\n /* [MS-XLS] 2.5.61 ControlInfo */\n\n\n function parse_ControlInfo(blob) {\n var flags = blob.read_shift(1);\n blob.l++;\n var accel = blob.read_shift(2);\n blob.l += 2;\n return [flags, accel];\n }\n /* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\n\n\n function parse_URLMoniker(blob) {\n var len = blob.read_shift(4),\n start = blob.l;\n var extra = false;\n\n if (len > 24) {\n /* look ahead */\n blob.l += len - 24;\n if (blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n blob.l = start;\n }\n\n var url = blob.read_shift((extra ? len - 24 : len) >> 1, 'utf16le').replace(chr0, \"\");\n if (extra) blob.l += 24;\n return url;\n }\n /* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\n\n\n function parse_FileMoniker(blob) {\n blob.l += 2; //var cAnti = blob.read_shift(2);\n\n var ansiPath = blob.read_shift(0, 'lpstr-ansi');\n blob.l += 2; //var endServer = blob.read_shift(2);\n\n if (blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n var sz = blob.read_shift(4);\n if (sz === 0) return ansiPath.replace(/\\\\/g, \"/\");\n var bytes = blob.read_shift(4);\n if (blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n var unicodePath = blob.read_shift(bytes >> 1, 'utf16le').replace(chr0, \"\");\n return unicodePath;\n }\n /* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\n\n\n function parse_HyperlinkMoniker(blob, length) {\n var clsid = blob.read_shift(16);\n length -= 16;\n\n switch (clsid) {\n case \"e0c9ea79f9bace118c8200aa004ba90b\":\n return parse_URLMoniker(blob, length);\n\n case \"0303000000000000c000000000000046\":\n return parse_FileMoniker(blob, length);\n\n default:\n throw new Error(\"Unsupported Moniker \" + clsid);\n }\n }\n /* [MS-OSHARED] 2.3.7.9 HyperlinkString */\n\n\n function parse_HyperlinkString(blob) {\n var len = blob.read_shift(4);\n var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n return o;\n }\n /* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\n\n\n function parse_Hyperlink(blob, length) {\n var end = blob.l + length;\n var sVer = blob.read_shift(4);\n if (sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n var flags = blob.read_shift(2);\n blob.l += 2;\n var displayName,\n targetFrameName,\n moniker,\n oleMoniker,\n Loc = \"\",\n guid,\n fileTime;\n if (flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n if (flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0020) guid = blob.read_shift(16);\n if (flags & 0x0040) fileTime = parse_FILETIME(blob\n /*, 8*/\n );\n blob.l = end;\n var target = targetFrameName || moniker || oleMoniker || \"\";\n if (target && Loc) target += \"#\" + Loc;\n if (!target) target = \"#\" + Loc;\n var out = {\n Target: target\n };\n if (guid) out.guid = guid;\n if (fileTime) out.time = fileTime;\n if (displayName) out.Tooltip = displayName;\n return out;\n }\n\n function write_Hyperlink(hl) {\n var out = new_buf(512),\n i = 0;\n var Target = hl.Target;\n var F = Target.indexOf(\"#\") > -1 ? 0x1f : 0x17;\n\n switch (Target.charAt(0)) {\n case \"#\":\n F = 0x1c;\n break;\n\n case \".\":\n F &= ~2;\n break;\n }\n\n out.write_shift(4, 2);\n out.write_shift(4, F);\n var data = [8, 6815827, 6619237, 4849780, 83];\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(4, data[i]);\n }\n\n if (F == 0x1C) {\n Target = Target.slice(1);\n out.write_shift(4, Target.length + 1);\n\n for (i = 0; i < Target.length; ++i) {\n out.write_shift(2, Target.charCodeAt(i));\n }\n\n out.write_shift(2, 0);\n } else if (F & 0x02) {\n data = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n out.write_shift(4, 2 * (Target.length + 1));\n\n for (i = 0; i < Target.length; ++i) {\n out.write_shift(2, Target.charCodeAt(i));\n }\n\n out.write_shift(2, 0);\n } else {\n data = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n var P = 0;\n\n while (Target.slice(P * 3, P * 3 + 3) == \"../\" || Target.slice(P * 3, P * 3 + 3) == \"..\\\\\") {\n ++P;\n }\n\n out.write_shift(2, P);\n out.write_shift(4, Target.length + 1);\n\n for (i = 0; i < Target.length; ++i) {\n out.write_shift(1, Target.charCodeAt(i) & 0xFF);\n }\n\n out.write_shift(1, 0);\n out.write_shift(2, 0xFFFF);\n out.write_shift(2, 0xDEAD);\n\n for (i = 0; i < 6; ++i) {\n out.write_shift(4, 0);\n }\n }\n\n return out.slice(0, out.l);\n }\n /* 2.5.178 LongRGBA */\n\n\n function parse_LongRGBA(blob) {\n var r = blob.read_shift(1),\n g = blob.read_shift(1),\n b = blob.read_shift(1),\n a = blob.read_shift(1);\n return [r, g, b, a];\n }\n /* 2.5.177 LongRGB */\n\n\n function parse_LongRGB(blob, length) {\n var x = parse_LongRGBA(blob, length);\n x[3] = 0;\n return x;\n }\n /* [MS-XLS] 2.5.19 */\n\n\n function parse_XLSCell(blob) {\n var rw = blob.read_shift(2); // 0-indexed\n\n var col = blob.read_shift(2);\n var ixfe = blob.read_shift(2);\n return {\n r: rw,\n c: col,\n ixfe: ixfe\n };\n }\n\n function write_XLSCell(R, C, ixfe, o) {\n if (!o) o = new_buf(6);\n o.write_shift(2, R);\n o.write_shift(2, C);\n o.write_shift(2, ixfe || 0);\n return o;\n }\n /* [MS-XLS] 2.5.134 */\n\n\n function parse_frtHeader(blob) {\n var rt = blob.read_shift(2);\n var flags = blob.read_shift(2); // TODO: parse these flags\n\n blob.l += 8;\n return {\n type: rt,\n flags: flags\n };\n }\n\n function parse_OptXLUnicodeString(blob, length, opts) {\n return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts);\n }\n /* [MS-XLS] 2.5.344 */\n\n\n function parse_XTI(blob, length, opts) {\n var w = opts.biff > 8 ? 4 : 2;\n var iSupBook = blob.read_shift(w),\n itabFirst = blob.read_shift(w, 'i'),\n itabLast = blob.read_shift(w, 'i');\n return [iSupBook, itabFirst, itabLast];\n }\n /* [MS-XLS] 2.5.218 */\n\n\n function parse_RkRec(blob) {\n var ixfe = blob.read_shift(2);\n var RK = parse_RkNumber(blob);\n return [ixfe, RK];\n }\n /* [MS-XLS] 2.5.1 */\n\n\n function parse_AddinUdf(blob, length, opts) {\n blob.l += 4;\n length -= 4;\n var l = blob.l + length;\n var udfName = parse_ShortXLUnicodeString(blob, length, opts);\n var cb = blob.read_shift(2);\n l -= blob.l;\n if (cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n blob.l += cb;\n return udfName;\n }\n /* [MS-XLS] 2.5.209 TODO: Check sizes */\n\n\n function parse_Ref8U(blob) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(2);\n var colLast = blob.read_shift(2);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n }\n\n function write_Ref8U(r, o) {\n if (!o) o = new_buf(8);\n o.write_shift(2, r.s.r);\n o.write_shift(2, r.e.r);\n o.write_shift(2, r.s.c);\n o.write_shift(2, r.e.c);\n return o;\n }\n /* [MS-XLS] 2.5.211 */\n\n\n function parse_RefU(blob) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(1);\n var colLast = blob.read_shift(1);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n }\n /* [MS-XLS] 2.5.207 */\n\n\n var parse_Ref = parse_RefU;\n /* [MS-XLS] 2.5.143 */\n\n function parse_FtCmo(blob) {\n blob.l += 4;\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var flags = blob.read_shift(2);\n blob.l += 12;\n return [id, ot, flags];\n }\n /* [MS-XLS] 2.5.149 */\n\n\n function parse_FtNts(blob) {\n var out = {};\n blob.l += 4;\n blob.l += 16; // GUID TODO\n\n out.fSharedNote = blob.read_shift(2);\n blob.l += 4;\n return out;\n }\n /* [MS-XLS] 2.5.142 */\n\n\n function parse_FtCf(blob) {\n var out = {};\n blob.l += 4;\n blob.cf = blob.read_shift(2);\n return out;\n }\n /* [MS-XLS] 2.5.140 - 2.5.154 and friends */\n\n\n function parse_FtSkip(blob) {\n blob.l += 2;\n blob.l += blob.read_shift(2);\n }\n\n var FtTab = {\n 0x00: parse_FtSkip,\n\n /* FtEnd */\n 0x04: parse_FtSkip,\n\n /* FtMacro */\n 0x05: parse_FtSkip,\n\n /* FtButton */\n 0x06: parse_FtSkip,\n\n /* FtGmo */\n 0x07: parse_FtCf,\n\n /* FtCf */\n 0x08: parse_FtSkip,\n\n /* FtPioGrbit */\n 0x09: parse_FtSkip,\n\n /* FtPictFmla */\n 0x0A: parse_FtSkip,\n\n /* FtCbls */\n 0x0B: parse_FtSkip,\n\n /* FtRbo */\n 0x0C: parse_FtSkip,\n\n /* FtSbs */\n 0x0D: parse_FtNts,\n\n /* FtNts */\n 0x0E: parse_FtSkip,\n\n /* FtSbsFmla */\n 0x0F: parse_FtSkip,\n\n /* FtGboData */\n 0x10: parse_FtSkip,\n\n /* FtEdoData */\n 0x11: parse_FtSkip,\n\n /* FtRboData */\n 0x12: parse_FtSkip,\n\n /* FtCblsData */\n 0x13: parse_FtSkip,\n\n /* FtLbsData */\n 0x14: parse_FtSkip,\n\n /* FtCblsFmla */\n 0x15: parse_FtCmo\n };\n\n function parse_FtArray(blob, length) {\n var tgt = blob.l + length;\n var fts = [];\n\n while (blob.l < tgt) {\n var ft = blob.read_shift(2);\n blob.l -= 2;\n\n try {\n fts.push(FtTab[ft](blob, tgt - blob.l));\n } catch (e) {\n blob.l = tgt;\n return fts;\n }\n }\n\n if (blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\n return fts;\n }\n /* --- 2.4 Records --- */\n\n /* [MS-XLS] 2.4.21 */\n\n\n function parse_BOF(blob, length) {\n var o = {\n BIFFVer: 0,\n dt: 0\n };\n o.BIFFVer = blob.read_shift(2);\n length -= 2;\n\n if (length >= 2) {\n o.dt = blob.read_shift(2);\n blob.l -= 2;\n }\n\n switch (o.BIFFVer) {\n case 0x0600:\n /* BIFF8 */\n\n case 0x0500:\n /* BIFF5 */\n\n case 0x0400:\n /* BIFF4 */\n\n case 0x0300:\n /* BIFF3 */\n\n case 0x0200:\n /* BIFF2 */\n\n case 0x0002:\n case 0x0007:\n /* BIFF2 */\n break;\n\n default:\n if (length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n }\n\n blob.read_shift(length);\n return o;\n }\n\n function write_BOF(wb, t, o) {\n var h = 0x0600,\n w = 16;\n\n switch (o.bookType) {\n case 'biff8':\n break;\n\n case 'biff5':\n h = 0x0500;\n w = 8;\n break;\n\n case 'biff4':\n h = 0x0004;\n w = 6;\n break;\n\n case 'biff3':\n h = 0x0003;\n w = 6;\n break;\n\n case 'biff2':\n h = 0x0002;\n w = 4;\n break;\n\n case 'xla':\n break;\n\n default:\n throw new Error(\"unsupported BIFF version\");\n }\n\n var out = new_buf(w);\n out.write_shift(2, h);\n out.write_shift(2, t);\n if (w > 4) out.write_shift(2, 0x7262);\n if (w > 6) out.write_shift(2, 0x07CD);\n\n if (w > 8) {\n out.write_shift(2, 0xC009);\n out.write_shift(2, 0x0001);\n out.write_shift(2, 0x0706);\n out.write_shift(2, 0x0000);\n }\n\n return out;\n }\n /* [MS-XLS] 2.4.146 */\n\n\n function parse_InterfaceHdr(blob, length) {\n if (length === 0) return 0x04b0;\n\n if (blob.read_shift(2) !== 0x04b0) {\n /* empty */\n }\n\n return 0x04b0;\n }\n /* [MS-XLS] 2.4.349 */\n\n\n function parse_WriteAccess(blob, length, opts) {\n if (opts.enc) {\n blob.l += length;\n return \"\";\n }\n\n var l = blob.l; // TODO: make sure XLUnicodeString doesnt overrun\n\n var UserName = parse_XLUnicodeString2(blob, 0, opts);\n blob.read_shift(length + l - blob.l);\n return UserName;\n }\n\n function write_WriteAccess(s, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(b8 ? 112 : 54);\n o.write_shift(opts.biff == 8 ? 2 : 1, 7);\n if (b8) o.write_shift(1, 0);\n o.write_shift(4, 0x33336853);\n o.write_shift(4, 0x00534A74 | (b8 ? 0 : 0x20000000));\n\n while (o.l < o.length) {\n o.write_shift(1, b8 ? 0 : 32);\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.351 */\n\n\n function parse_WsBool(blob, length, opts) {\n var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n return {\n fDialog: flags & 0x10\n };\n }\n /* [MS-XLS] 2.4.28 */\n\n\n function parse_BoundSheet8(blob, length, opts) {\n var pos = blob.read_shift(4);\n var hidden = blob.read_shift(1) & 0x03;\n var dt = blob.read_shift(1);\n\n switch (dt) {\n case 0:\n dt = 'Worksheet';\n break;\n\n case 1:\n dt = 'Macrosheet';\n break;\n\n case 2:\n dt = 'Chartsheet';\n break;\n\n case 6:\n dt = 'VBAModule';\n break;\n }\n\n var name = parse_ShortXLUnicodeString(blob, 0, opts);\n if (name.length === 0) name = \"Sheet1\";\n return {\n pos: pos,\n hs: hidden,\n dt: dt,\n name: name\n };\n }\n\n function write_BoundSheet8(data, opts) {\n var w = !opts || opts.biff >= 8 ? 2 : 1;\n var o = new_buf(8 + w * data.name.length);\n o.write_shift(4, data.pos);\n o.write_shift(1, data.hs || 0);\n o.write_shift(1, data.dt);\n o.write_shift(1, data.name.length);\n if (opts.biff >= 8) o.write_shift(1, 1);\n o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n var out = o.slice(0, o.l);\n out.l = o.l;\n return out;\n }\n /* [MS-XLS] 2.4.265 TODO */\n\n\n function parse_SST(blob, length) {\n var end = blob.l + length;\n var cnt = blob.read_shift(4);\n var ucnt = blob.read_shift(4);\n var strs = [];\n\n for (var i = 0; i != ucnt && blob.l < end; ++i) {\n strs.push(parse_XLUnicodeRichExtendedString(blob));\n }\n\n strs.Count = cnt;\n strs.Unique = ucnt;\n return strs;\n }\n\n function write_SST(sst, opts) {\n var header = new_buf(8);\n header.write_shift(4, sst.Count);\n header.write_shift(4, sst.Unique);\n var strs = [];\n\n for (var j = 0; j < sst.length; ++j) {\n strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n }\n\n var o = bconcat([header].concat(strs));\n o.parts = [header.length].concat(strs.map(function (str) {\n return str.length;\n }));\n return o;\n }\n /* [MS-XLS] 2.4.107 */\n\n\n function parse_ExtSST(blob, length) {\n var extsst = {};\n extsst.dsst = blob.read_shift(2);\n blob.l += length - 2;\n return extsst;\n }\n /* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\n\n\n function parse_Row(blob) {\n var z = {};\n z.r = blob.read_shift(2);\n z.c = blob.read_shift(2);\n z.cnt = blob.read_shift(2) - z.c;\n var miyRw = blob.read_shift(2);\n blob.l += 4; // reserved(2), unused(2)\n\n var flags = blob.read_shift(1); // various flags\n\n blob.l += 3; // reserved(8), ixfe(12), flags(4)\n\n if (flags & 0x07) z.level = flags & 0x07; // collapsed: flags & 0x10\n\n if (flags & 0x20) z.hidden = true;\n if (flags & 0x40) z.hpt = miyRw / 20;\n return z;\n }\n /* [MS-XLS] 2.4.125 */\n\n\n function parse_ForceFullCalculation(blob) {\n var header = parse_frtHeader(blob);\n if (header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n var fullcalc = blob.read_shift(4);\n return fullcalc !== 0x0;\n }\n /* [MS-XLS] 2.4.215 rt */\n\n\n function parse_RecalcId(blob) {\n blob.read_shift(2);\n return blob.read_shift(4);\n }\n /* [MS-XLS] 2.4.87 */\n\n\n function parse_DefaultRowHeight(blob, length, opts) {\n var f = 0;\n\n if (!(opts && opts.biff == 2)) {\n f = blob.read_shift(2);\n }\n\n var miyRw = blob.read_shift(2);\n\n if (opts && opts.biff == 2) {\n f = 1 - (miyRw >> 15);\n miyRw &= 0x7fff;\n }\n\n var fl = {\n Unsynced: f & 1,\n DyZero: (f & 2) >> 1,\n ExAsc: (f & 4) >> 2,\n ExDsc: (f & 8) >> 3\n };\n return [fl, miyRw];\n }\n /* [MS-XLS] 2.4.345 TODO */\n\n\n function parse_Window1(blob) {\n var xWn = blob.read_shift(2),\n yWn = blob.read_shift(2),\n dxWn = blob.read_shift(2),\n dyWn = blob.read_shift(2);\n var flags = blob.read_shift(2),\n iTabCur = blob.read_shift(2),\n iTabFirst = blob.read_shift(2);\n var ctabSel = blob.read_shift(2),\n wTabRatio = blob.read_shift(2);\n return {\n Pos: [xWn, yWn],\n Dim: [dxWn, dyWn],\n Flags: flags,\n CurTab: iTabCur,\n FirstTab: iTabFirst,\n Selected: ctabSel,\n TabRatio: wTabRatio\n };\n }\n\n function write_Window1() {\n var o = new_buf(18);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0x7260);\n o.write_shift(2, 0x44c0);\n o.write_shift(2, 0x38);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 1);\n o.write_shift(2, 0x01f4);\n return o;\n }\n /* [MS-XLS] 2.4.346 TODO */\n\n\n function parse_Window2(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff < 5) return {};\n var f = blob.read_shift(2);\n return {\n RTL: f & 0x40\n };\n }\n\n function write_Window2(view) {\n var o = new_buf(18),\n f = 0x6b6;\n if (view && view.RTL) f |= 0x40;\n o.write_shift(2, f);\n o.write_shift(4, 0);\n o.write_shift(4, 64);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n /* [MS-XLS] 2.4.189 TODO */\n\n\n function parse_Pane() {}\n /* [MS-XLS] 2.4.122 TODO */\n\n\n function parse_Font(blob, length, opts) {\n var o = {\n dyHeight: blob.read_shift(2),\n fl: blob.read_shift(2)\n };\n\n switch (opts && opts.biff || 8) {\n case 2:\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n break;\n\n default:\n blob.l += 10;\n break;\n }\n\n o.name = parse_ShortXLUnicodeString(blob, 0, opts);\n return o;\n }\n\n function write_Font(data, opts) {\n var name = data.name || \"Arial\";\n var b5 = opts && opts.biff == 5,\n w = b5 ? 15 + name.length : 16 + 2 * name.length;\n var o = new_buf(w);\n o.write_shift(2, (data.sz || 12) * 20);\n o.write_shift(4, 0);\n o.write_shift(2, 400);\n o.write_shift(4, 0);\n o.write_shift(2, 0);\n o.write_shift(1, name.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * name.length, name, b5 ? \"sbcs\" : \"utf16le\");\n return o;\n }\n /* [MS-XLS] 2.4.149 */\n\n\n function parse_LabelSst(blob) {\n var cell = parse_XLSCell(blob);\n cell.isst = blob.read_shift(4);\n return cell;\n }\n\n function write_LabelSst(R, C, v, os) {\n var o = new_buf(10);\n write_XLSCell(R, C, os, o);\n o.write_shift(4, v);\n return o;\n }\n /* [MS-XLS] 2.4.148 */\n\n\n function parse_Label(blob, length, opts) {\n var target = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) blob.l++;\n var str = parse_XLUnicodeString(blob, target - blob.l, opts);\n cell.val = str;\n return cell;\n }\n\n function write_Label(R, C, v, os, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(6 + 2 + +b8 + (1 + b8) * v.length);\n write_XLSCell(R, C, os, o);\n o.write_shift(2, v.length);\n if (b8) o.write_shift(1, 1);\n o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n return o;\n }\n /* [MS-XLS] 2.4.126 Number Formats */\n\n\n function parse_Format(blob, length, opts) {\n var numFmtId = blob.read_shift(2);\n var fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n return [numFmtId, fmtstr];\n }\n\n function write_Format(i, f, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 3 + f.length : 5 + 2 * f.length);\n o.write_shift(2, i);\n o.write_shift(b5 ? 1 : 2, f.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * f.length, f, b5 ? 'sbcs' : 'utf16le');\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (out.l == null) out.l = out.length;\n return out;\n }\n\n var parse_BIFF2Format = parse_XLUnicodeString2;\n /* [MS-XLS] 2.4.90 */\n\n function parse_Dimensions(blob, length, opts) {\n var end = blob.l + length;\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = blob.read_shift(2),\n C = blob.read_shift(2);\n blob.l = end;\n return {\n s: {\n r: r,\n c: c\n },\n e: {\n r: R,\n c: C\n }\n };\n }\n\n function write_Dimensions(range, opts) {\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var o = new_buf(2 * w + 6);\n o.write_shift(w, range.s.r);\n o.write_shift(w, range.e.r + 1);\n o.write_shift(2, range.s.c);\n o.write_shift(2, range.e.c + 1);\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-XLS] 2.4.220 */\n\n\n function parse_RK(blob) {\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrec = parse_RkRec(blob);\n return {\n r: rw,\n c: col,\n ixfe: rkrec[0],\n rknum: rkrec[1]\n };\n }\n /* [MS-XLS] 2.4.175 */\n\n\n function parse_MulRk(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrecs = [];\n\n while (blob.l < target) {\n rkrecs.push(parse_RkRec(blob));\n }\n\n if (blob.l !== target) throw new Error(\"MulRK read error\");\n var lastcol = blob.read_shift(2);\n if (rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n rkrec: rkrecs\n };\n }\n /* [MS-XLS] 2.4.174 */\n\n\n function parse_MulBlank(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var ixfes = [];\n\n while (blob.l < target) {\n ixfes.push(blob.read_shift(2));\n }\n\n if (blob.l !== target) throw new Error(\"MulBlank read error\");\n var lastcol = blob.read_shift(2);\n if (ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n ixfe: ixfes\n };\n }\n /* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\n\n\n function parse_CellStyleXF(blob, length, style, opts) {\n var o = {};\n var a = blob.read_shift(4),\n b = blob.read_shift(4);\n var c = blob.read_shift(4),\n d = blob.read_shift(2);\n o.patternType = XLSFillPattern[c >> 26];\n if (!opts.cellStyles) return o;\n o.alc = a & 0x07;\n o.fWrap = a >> 3 & 0x01;\n o.alcV = a >> 4 & 0x07;\n o.fJustLast = a >> 7 & 0x01;\n o.trot = a >> 8 & 0xFF;\n o.cIndent = a >> 16 & 0x0F;\n o.fShrinkToFit = a >> 20 & 0x01;\n o.iReadOrder = a >> 22 & 0x02;\n o.fAtrNum = a >> 26 & 0x01;\n o.fAtrFnt = a >> 27 & 0x01;\n o.fAtrAlc = a >> 28 & 0x01;\n o.fAtrBdr = a >> 29 & 0x01;\n o.fAtrPat = a >> 30 & 0x01;\n o.fAtrProt = a >> 31 & 0x01;\n o.dgLeft = b & 0x0F;\n o.dgRight = b >> 4 & 0x0F;\n o.dgTop = b >> 8 & 0x0F;\n o.dgBottom = b >> 12 & 0x0F;\n o.icvLeft = b >> 16 & 0x7F;\n o.icvRight = b >> 23 & 0x7F;\n o.grbitDiag = b >> 30 & 0x03;\n o.icvTop = c & 0x7F;\n o.icvBottom = c >> 7 & 0x7F;\n o.icvDiag = c >> 14 & 0x7F;\n o.dgDiag = c >> 21 & 0x0F;\n o.icvFore = d & 0x7F;\n o.icvBack = d >> 7 & 0x7F;\n o.fsxButton = d >> 14 & 0x01;\n return o;\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 */\n\n\n function parse_XF(blob, length, opts) {\n var o = {};\n o.ifnt = blob.read_shift(2);\n o.numFmtId = blob.read_shift(2);\n o.flags = blob.read_shift(2);\n o.fStyle = o.flags >> 2 & 0x01;\n length -= 6;\n o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n return o;\n }\n\n function write_XF(data, ixfeP, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 16 : 20);\n o.write_shift(2, 0);\n\n if (data.style) {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0xFFF4);\n } else {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, ixfeP << 4);\n }\n\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n if (!b5) o.write_shift(4, 0);\n o.write_shift(2, 0);\n return o;\n }\n /* [MS-XLS] 2.4.134 */\n\n\n function parse_Guts(blob) {\n blob.l += 4;\n var out = [blob.read_shift(2), blob.read_shift(2)];\n if (out[0] !== 0) out[0]--;\n if (out[1] !== 0) out[1]--;\n if (out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n return out;\n }\n\n function write_Guts(guts) {\n var o = new_buf(8);\n o.write_shift(4, 0);\n o.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n o.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n return o;\n }\n /* [MS-XLS] 2.4.24 */\n\n\n function parse_BoolErr(blob, length, opts) {\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) ++blob.l;\n var val = parse_Bes(blob, 2);\n cell.val = val;\n cell.t = val === true || val === false ? 'b' : 'e';\n return cell;\n }\n\n function write_BoolErr(R, C, v, os, opts, t) {\n var o = new_buf(8);\n write_XLSCell(R, C, os, o);\n write_Bes(v, t, o);\n return o;\n }\n /* [MS-XLS] 2.4.180 Number */\n\n\n function parse_Number(blob) {\n var cell = parse_XLSCell(blob, 6);\n var xnum = parse_Xnum(blob, 8);\n cell.val = xnum;\n return cell;\n }\n\n function write_Number(R, C, v, os) {\n var o = new_buf(14);\n write_XLSCell(R, C, os, o);\n write_Xnum(v, o);\n return o;\n }\n\n var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n /* [MS-XLS] 2.4.271 */\n\n function parse_SupBook(blob, length, opts) {\n var end = blob.l + length;\n var ctab = blob.read_shift(2);\n var cch = blob.read_shift(2);\n opts.sbcch = cch;\n if (cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n if (cch < 0x01 || cch > 0xff) throw new Error(\"Unexpected SupBook type: \" + cch);\n var virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n /* TODO: 2.5.277 Virtual Path */\n\n var rgst = [];\n\n while (end > blob.l) {\n rgst.push(parse_XLUnicodeString(blob));\n }\n\n return [cch, ctab, virtPath, rgst];\n }\n /* [MS-XLS] 2.4.105 TODO */\n\n\n function parse_ExternName(blob, length, opts) {\n var flags = blob.read_shift(2);\n var body;\n var o = {\n fBuiltIn: flags & 0x01,\n fWantAdvise: flags >>> 1 & 0x01,\n fWantPict: flags >>> 2 & 0x01,\n fOle: flags >>> 3 & 0x01,\n fOleLink: flags >>> 4 & 0x01,\n cf: flags >>> 5 & 0x3FF,\n fIcon: flags >>> 15 & 0x01\n };\n if (opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length - 2, opts); //else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\n o.body = body || blob.read_shift(length - 2);\n if (typeof body === \"string\") o.Name = body;\n return o;\n }\n /* [MS-XLS] 2.4.150 TODO */\n\n\n var XLSLblBuiltIn = [\"_xlnm.Consolidate_Area\", \"_xlnm.Auto_Open\", \"_xlnm.Auto_Close\", \"_xlnm.Extract\", \"_xlnm.Database\", \"_xlnm.Criteria\", \"_xlnm.Print_Area\", \"_xlnm.Print_Titles\", \"_xlnm.Recorder\", \"_xlnm.Data_Form\", \"_xlnm.Auto_Activate\", \"_xlnm.Auto_Deactivate\", \"_xlnm.Sheet_Title\", \"_xlnm._FilterDatabase\"];\n\n function parse_Lbl(blob, length, opts) {\n var target = blob.l + length;\n var flags = blob.read_shift(2);\n var chKey = blob.read_shift(1);\n var cch = blob.read_shift(1);\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var itab = 0;\n\n if (!opts || opts.biff >= 5) {\n if (opts.biff != 5) blob.l += 2;\n itab = blob.read_shift(2);\n if (opts.biff == 5) blob.l += 2;\n blob.l += 4;\n }\n\n var name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n if (flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n var npflen = target - blob.l;\n if (opts && opts.biff == 2) --npflen;\n var rgce = target == blob.l || cce === 0 ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n return {\n chKey: chKey,\n Name: name,\n itab: itab,\n rgce: rgce\n };\n }\n /* [MS-XLS] 2.4.106 TODO: verify filename encoding */\n\n\n function parse_ExternSheet(blob, length, opts) {\n if (opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n var o = [],\n target = blob.l + length,\n len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\n while (len-- !== 0) {\n o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n } // [iSupBook, itabFirst, itabLast];\n\n\n if (blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n return o;\n }\n\n function parse_BIFF5ExternSheet(blob, length, opts) {\n if (blob[blob.l + 1] == 0x03) blob[blob.l]++;\n var o = parse_ShortXLUnicodeString(blob, length, opts);\n return o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n }\n /* [MS-XLS] 2.4.176 TODO: check older biff */\n\n\n function parse_NameCmt(blob, length, opts) {\n if (opts.biff < 8) {\n blob.l += length;\n return;\n }\n\n var cchName = blob.read_shift(2);\n var cchComment = blob.read_shift(2);\n var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n return [name, comment];\n }\n /* [MS-XLS] 2.4.260 */\n\n\n function parse_ShrFmla(blob, length, opts) {\n var ref = parse_RefU(blob, 6);\n blob.l++;\n var cUse = blob.read_shift(1);\n length -= 8;\n return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n }\n /* [MS-XLS] 2.4.4 TODO */\n\n\n function parse_Array(blob, length, opts) {\n var ref = parse_Ref(blob, 6);\n /* TODO: fAlwaysCalc */\n\n switch (opts.biff) {\n case 2:\n blob.l++;\n length -= 7;\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n length -= 8;\n break;\n\n default:\n blob.l += 6;\n length -= 12;\n }\n\n return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n }\n /* [MS-XLS] 2.4.173 */\n\n\n function parse_MTRSettings(blob) {\n var fMTREnabled = blob.read_shift(4) !== 0x00;\n var fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n var cUserThreadCount = blob.read_shift(4);\n return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n }\n /* [MS-XLS] 2.5.186 TODO: BIFF5 */\n\n\n function parse_NoteSh(blob, length, opts) {\n if (opts.biff < 8) return;\n var row = blob.read_shift(2),\n col = blob.read_shift(2);\n var flags = blob.read_shift(2),\n idObj = blob.read_shift(2);\n var stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n if (opts.biff < 8) blob.read_shift(1);\n return [{\n r: row,\n c: col\n }, stAuthor, idObj, flags];\n }\n /* [MS-XLS] 2.4.179 */\n\n\n function parse_Note(blob, length, opts) {\n /* TODO: Support revisions */\n return parse_NoteSh(blob, length, opts);\n }\n /* [MS-XLS] 2.4.168 */\n\n\n function parse_MergeCells(blob, length) {\n var merges = [];\n var cmcs = blob.read_shift(2);\n\n while (cmcs--) {\n merges.push(parse_Ref8U(blob, length));\n }\n\n return merges;\n }\n\n function write_MergeCells(merges) {\n var o = new_buf(2 + merges.length * 8);\n o.write_shift(2, merges.length);\n\n for (var i = 0; i < merges.length; ++i) {\n write_Ref8U(merges[i], o);\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.181 TODO: parse all the things! */\n\n\n function parse_Obj(blob, length, opts) {\n if (opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n var cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\n var fts = parse_FtArray(blob, length - 22, cmo[1]);\n return {\n cmo: cmo,\n ft: fts\n };\n }\n /* from older spec */\n\n\n var parse_BIFF5OT = [];\n\n parse_BIFF5OT[0x08] = function (blob, length) {\n var tgt = blob.l + length;\n blob.l += 10; // todo\n\n var cf = blob.read_shift(2);\n blob.l += 4;\n blob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\n blob.l += 2;\n blob.l += 2; //var grbit = blob.read_shift(2);\n\n blob.l += 4;\n var cchName = blob.read_shift(1);\n blob.l += cchName; // TODO: stName\n\n blob.l = tgt; // TODO: fmla\n\n return {\n fmt: cf\n };\n };\n\n function parse_BIFF5Obj(blob, length, opts) {\n blob.l += 4; //var cnt = blob.read_shift(4);\n\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var grbit = blob.read_shift(2);\n blob.l += 2; //var colL = blob.read_shift(2);\n\n blob.l += 2; //var dxL = blob.read_shift(2);\n\n blob.l += 2; //var rwT = blob.read_shift(2);\n\n blob.l += 2; //var dyT = blob.read_shift(2);\n\n blob.l += 2; //var colR = blob.read_shift(2);\n\n blob.l += 2; //var dxR = blob.read_shift(2);\n\n blob.l += 2; //var rwB = blob.read_shift(2);\n\n blob.l += 2; //var dyB = blob.read_shift(2);\n\n blob.l += 2; //var cbMacro = blob.read_shift(2);\n\n blob.l += 6;\n length -= 36;\n var fts = [];\n fts.push((parse_BIFF5OT[ot] || parsenoop)(blob, length, opts));\n return {\n cmo: [id, ot, grbit],\n ft: fts\n };\n }\n /* [MS-XLS] 2.4.329 TODO: parse properly */\n\n\n function parse_TxO(blob, length, opts) {\n var s = blob.l;\n var texts = \"\";\n\n try {\n blob.l += 4;\n var ot = (opts.lastobj || {\n cmo: [0, 0]\n }).cmo[1];\n var controlInfo; // eslint-disable-line no-unused-vars\n\n if ([0, 5, 7, 11, 12, 14].indexOf(ot) == -1) blob.l += 6;else controlInfo = parse_ControlInfo(blob, 6, opts);\n var cchText = blob.read_shift(2);\n /*var cbRuns = */\n\n blob.read_shift(2);\n /*var ifntEmpty = */\n\n parseuint16(blob, 2);\n var len = blob.read_shift(2);\n blob.l += len; //var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n for (var i = 1; i < blob.lens.length - 1; ++i) {\n if (blob.l - s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n var hdr = blob[blob.l];\n var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i + 1] - blob.lens[i] - 1);\n texts += t;\n if (texts.length >= (hdr ? cchText : 2 * cchText)) break;\n }\n\n if (texts.length !== cchText && texts.length !== cchText * 2) {\n throw new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n }\n\n blob.l = s + length;\n /* [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\n return {\n t: texts\n };\n } catch (e) {\n blob.l = s + length;\n return {\n t: texts\n };\n }\n }\n /* [MS-XLS] 2.4.140 */\n\n\n function parse_HLink(blob, length) {\n var ref = parse_Ref8U(blob, 8);\n blob.l += 16;\n /* CLSID */\n\n var hlink = parse_Hyperlink(blob, length - 24);\n return [ref, hlink];\n }\n\n function write_HLink(hl) {\n var O = new_buf(24);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n var clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (var i = 0; i < 16; ++i) {\n O.write_shift(1, parseInt(clsid[i], 16));\n }\n\n return bconcat([O, write_Hyperlink(hl[1])]);\n }\n /* [MS-XLS] 2.4.141 */\n\n\n function parse_HLinkTooltip(blob, length) {\n blob.read_shift(2);\n var ref = parse_Ref8U(blob, 8);\n var wzTooltip = blob.read_shift((length - 10) / 2, 'dbcs-cont');\n wzTooltip = wzTooltip.replace(chr0, \"\");\n return [ref, wzTooltip];\n }\n\n function write_HLinkTooltip(hl) {\n var TT = hl[1].Tooltip;\n var O = new_buf(10 + 2 * (TT.length + 1));\n O.write_shift(2, 0x0800);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n\n for (var i = 0; i < TT.length; ++i) {\n O.write_shift(2, TT.charCodeAt(i));\n }\n\n O.write_shift(2, 0);\n return O;\n }\n /* [MS-XLS] 2.4.63 */\n\n\n function parse_Country(blob) {\n var o = [0, 0],\n d;\n d = blob.read_shift(2);\n o[0] = CountryEnum[d] || d;\n d = blob.read_shift(2);\n o[1] = CountryEnum[d] || d;\n return o;\n }\n\n function write_Country(o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, 0x01);\n o.write_shift(2, 0x01);\n return o;\n }\n /* [MS-XLS] 2.4.50 ClrtClient */\n\n\n function parse_ClrtClient(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.188 */\n\n\n function parse_Palette(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n }\n /* [MS-XLS] 2.4.354 */\n\n\n function parse_XFCRC(blob) {\n blob.l += 2;\n var o = {\n cxfs: 0,\n crc: 0\n };\n o.cxfs = blob.read_shift(2);\n o.crc = blob.read_shift(4);\n return o;\n }\n /* [MS-XLS] 2.4.53 TODO: parse flags */\n\n /* [MS-XLSB] 2.4.323 TODO: parse flags */\n\n\n function parse_ColInfo(blob, length, opts) {\n if (!opts.cellStyles) return parsenoop(blob, length);\n var w = opts && opts.biff >= 12 ? 4 : 2;\n var colFirst = blob.read_shift(w);\n var colLast = blob.read_shift(w);\n var coldx = blob.read_shift(w);\n var ixfe = blob.read_shift(w);\n var flags = blob.read_shift(2);\n if (w == 2) blob.l += 2;\n var o = {\n s: colFirst,\n e: colLast,\n w: coldx,\n ixfe: ixfe,\n flags: flags\n };\n if (opts.biff >= 5 || !opts.biff) o.level = flags >> 8 & 0x7;\n return o;\n }\n /* [MS-XLS] 2.4.257 */\n\n\n function parse_Setup(blob, length) {\n var o = {};\n if (length < 32) return o;\n blob.l += 16;\n o.header = parse_Xnum(blob, 8);\n o.footer = parse_Xnum(blob, 8);\n blob.l += 2;\n return o;\n }\n /* [MS-XLS] 2.4.261 */\n\n\n function parse_ShtProps(blob, length, opts) {\n var def = {\n area: false\n };\n\n if (opts.biff != 5) {\n blob.l += length;\n return def;\n }\n\n var d = blob.read_shift(1);\n blob.l += 3;\n if (d & 0x10) def.area = true;\n return def;\n }\n /* [MS-XLS] 2.4.241 */\n\n\n function write_RRTabId(n) {\n var out = new_buf(2 * n);\n\n for (var i = 0; i < n; ++i) {\n out.write_shift(2, i + 1);\n }\n\n return out;\n }\n\n var parse_Blank = parse_XLSCell;\n /* [MS-XLS] 2.4.20 Just the cell */\n\n var parse_Scl = parseuint16a;\n /* [MS-XLS] 2.4.247 num, den */\n\n var parse_String = parse_XLUnicodeString;\n /* [MS-XLS] 2.4.268 */\n\n /* --- Specific to versions before BIFF8 --- */\n\n function parse_ImData(blob) {\n var cf = blob.read_shift(2);\n var env = blob.read_shift(2);\n var lcb = blob.read_shift(4);\n var o = {\n fmt: cf,\n env: env,\n len: lcb,\n data: blob.slice(blob.l, blob.l + lcb)\n };\n blob.l += lcb;\n return o;\n }\n /* BIFF2_??? where ??? is the name from [XLS] */\n\n\n function parse_BIFF2STR(blob, length, opts) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var str = parse_XLUnicodeString2(blob, length - 7, opts);\n cell.t = 'str';\n cell.val = str;\n return cell;\n }\n\n function parse_BIFF2NUM(blob) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = parse_Xnum(blob, 8);\n cell.t = 'n';\n cell.val = num;\n return cell;\n }\n\n function write_BIFF2NUM(r, c, val) {\n var out = new_buf(15);\n write_BIFF2Cell(out, r, c);\n out.write_shift(8, val, 'f');\n return out;\n }\n\n function parse_BIFF2INT(blob) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = blob.read_shift(2);\n cell.t = 'n';\n cell.val = num;\n return cell;\n }\n\n function write_BIFF2INT(r, c, val) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n out.write_shift(2, val);\n return out;\n }\n\n function parse_BIFF2STRING(blob) {\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, 'sbcs-cont');\n }\n /* TODO: convert to BIFF8 font struct */\n\n\n function parse_BIFF2FONTXTRA(blob, length) {\n blob.l += 6; // unknown\n\n blob.l += 2; // font weight \"bls\"\n\n blob.l += 1; // charset\n\n blob.l += 3; // unknown\n\n blob.l += 1; // font family\n\n blob.l += length - 13;\n }\n /* TODO: parse rich text runs */\n\n\n function parse_RString(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n var cch = blob.read_shift(2);\n var str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n blob.l = end;\n cell.t = 'str';\n cell.val = str;\n return cell;\n }\n /* from js-harb (C) 2014-present SheetJS */\n\n\n var DBF = function () {\n var dbf_codepage_map = {\n /* Code Pages Supported by Visual FoxPro */\n 0x01: 437,\n 0x02: 850,\n 0x03: 1252,\n 0x04: 10000,\n 0x64: 852,\n 0x65: 866,\n 0x66: 865,\n 0x67: 861,\n 0x68: 895,\n 0x69: 620,\n 0x6A: 737,\n 0x6B: 857,\n 0x78: 950,\n 0x79: 949,\n 0x7A: 936,\n 0x7B: 932,\n 0x7C: 874,\n 0x7D: 1255,\n 0x7E: 1256,\n 0x96: 10007,\n 0x97: 10029,\n 0x98: 10006,\n 0xC8: 1250,\n 0xC9: 1251,\n 0xCA: 1254,\n 0xCB: 1253,\n\n /* shapefile DBF extension */\n 0x00: 20127,\n 0x08: 865,\n 0x09: 437,\n 0x0A: 850,\n 0x0B: 437,\n 0x0D: 437,\n 0x0E: 850,\n 0x0F: 437,\n 0x10: 850,\n 0x11: 437,\n 0x12: 850,\n 0x13: 932,\n 0x14: 850,\n 0x15: 437,\n 0x16: 850,\n 0x17: 865,\n 0x18: 437,\n 0x19: 437,\n 0x1A: 850,\n 0x1B: 437,\n 0x1C: 863,\n 0x1D: 850,\n 0x1F: 852,\n 0x22: 852,\n 0x23: 852,\n 0x24: 860,\n 0x25: 850,\n 0x26: 866,\n 0x37: 850,\n 0x40: 852,\n 0x4D: 936,\n 0x4E: 949,\n 0x4F: 950,\n 0x50: 874,\n 0x57: 1252,\n 0x58: 1252,\n 0x59: 1252,\n 0xFF: 16969\n };\n var dbf_reverse_map = evert({\n 0x01: 437,\n 0x02: 850,\n 0x03: 1252,\n 0x04: 10000,\n 0x64: 852,\n 0x65: 866,\n 0x66: 865,\n 0x67: 861,\n 0x68: 895,\n 0x69: 620,\n 0x6A: 737,\n 0x6B: 857,\n 0x78: 950,\n 0x79: 949,\n 0x7A: 936,\n 0x7B: 932,\n 0x7C: 874,\n 0x7D: 1255,\n 0x7E: 1256,\n 0x96: 10007,\n 0x97: 10029,\n 0x98: 10006,\n 0xC8: 1250,\n 0xC9: 1251,\n 0xCA: 1254,\n 0xCB: 1253,\n 0x00: 20127\n });\n var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n /* TODO: find an actual specification */\n\n function dbf_to_aoa(buf, opts) {\n var out = [];\n /* TODO: browser based */\n\n var d = new_raw_buf(1);\n\n switch (opts.type) {\n case 'base64':\n d = s2a(Base64.decode(buf));\n break;\n\n case 'binary':\n d = s2a(buf);\n break;\n\n case 'buffer':\n case 'array':\n d = buf;\n break;\n }\n\n prep_blob(d, 0);\n /* header */\n\n var ft = d.read_shift(1);\n var memo = false;\n var vfp = false,\n l7 = false;\n\n switch (ft) {\n case 0x02:\n case 0x03:\n break;\n\n case 0x30:\n vfp = true;\n memo = true;\n break;\n\n case 0x31:\n vfp = true;\n break;\n\n case 0x83:\n memo = true;\n break;\n\n case 0x8B:\n memo = true;\n break;\n\n case 0x8C:\n memo = true;\n l7 = true;\n break;\n\n case 0xF5:\n memo = true;\n break;\n\n default:\n throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n }\n\n var\n /*filedate = new Date(),*/\n nrow = 0,\n fpos = 0;\n if (ft == 0x02) nrow = d.read_shift(2);\n /*filedate = new Date(d.read_shift(1) + 1900, d.read_shift(1) - 1, d.read_shift(1));*/\n\n d.l += 3;\n if (ft != 0x02) nrow = d.read_shift(4);\n if (ft != 0x02) fpos = d.read_shift(2);\n var rlen = d.read_shift(2);\n var\n /*flags = 0,*/\n current_cp = 1252;\n\n if (ft != 0x02) {\n d.l += 16;\n /*flags = */\n\n d.read_shift(1); //if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n /* codepage present in FoxPro */\n\n if (d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n d.l += 1;\n d.l += 2;\n }\n\n if (l7) d.l += 36;\n var fields = [],\n field = {};\n var hend = fpos - 10 - (vfp ? 264 : 0),\n ww = l7 ? 32 : 11;\n\n while (ft == 0x02 ? d.l < d.length && d[d.l] != 0x0d : d.l < hend) {\n field = {};\n field.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\\u0000\\r\\n].*$/g, \"\");\n d.l += ww;\n field.type = String.fromCharCode(d.read_shift(1));\n if (ft != 0x02 && !l7) field.offset = d.read_shift(4);\n field.len = d.read_shift(1);\n if (ft == 0x02) field.offset = d.read_shift(2);\n field.dec = d.read_shift(1);\n if (field.name.length) fields.push(field);\n if (ft != 0x02) d.l += l7 ? 13 : 14;\n\n switch (field.type) {\n case 'B':\n // VFP Double\n if ((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case 'G': // General\n\n case 'P':\n // Picture\n if (opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case 'C': // character\n\n case 'D': // date\n\n case 'F': // floating point\n\n case 'I': // long\n\n case 'L': // boolean\n\n case 'M': // memo\n\n case 'N': // number\n\n case 'O': // double\n\n case 'T': // datetime\n\n case 'Y': // currency\n\n case '0': // VFP _NullFlags\n\n case '@': // timestamp\n\n case '+':\n // autoincrement\n break;\n\n default:\n throw new Error('Unknown Field Type: ' + field.type);\n }\n }\n\n if (d[d.l] !== 0x0D) d.l = fpos - 1;else if (ft == 0x02) d.l = 0x209;\n\n if (ft != 0x02) {\n if (d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n d.l = fpos;\n }\n /* data */\n\n\n var R = 0,\n C = 0;\n out[0] = [];\n\n for (C = 0; C != fields.length; ++C) {\n out[0][C] = fields[C].name;\n }\n\n while (nrow-- > 0) {\n if (d[d.l] === 0x2A) {\n d.l += rlen;\n continue;\n }\n\n ++d.l;\n out[++R] = [];\n C = 0;\n\n for (C = 0; C != fields.length; ++C) {\n var dd = d.slice(d.l, d.l + fields[C].len);\n d.l += fields[C].len;\n prep_blob(dd, 0);\n var s = cptable.utils.decode(current_cp, dd);\n\n switch (fields[C].type) {\n case 'C':\n out[R][C] = cptable.utils.decode(current_cp, dd);\n out[R][C] = out[R][C].trim();\n break;\n\n case 'D':\n if (s.length === 8) out[R][C] = new Date(+s.slice(0, 4), +s.slice(4, 6) - 1, +s.slice(6, 8));else out[R][C] = s;\n break;\n\n case 'F':\n out[R][C] = parseFloat(s.trim());\n break;\n\n case '+':\n case 'I':\n out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i');\n break;\n\n case 'L':\n switch (s.toUpperCase()) {\n case 'Y':\n case 'T':\n out[R][C] = true;\n break;\n\n case 'N':\n case 'F':\n out[R][C] = false;\n break;\n\n case ' ':\n case '?':\n out[R][C] = false;\n break;\n\n /* NOTE: technically uninitialized */\n\n default:\n throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n }\n\n break;\n\n case 'M':\n /* TODO: handle memo files */\n if (!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n out[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));\n break;\n\n case 'N':\n out[R][C] = +s.replace(/\\u0000/g, \"\").trim();\n break;\n\n case '@':\n out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n break;\n\n case 'T':\n out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4));\n break;\n\n case 'Y':\n out[R][C] = dd.read_shift(4, 'i') / 1e4;\n break;\n\n case 'O':\n out[R][C] = -dd.read_shift(-8, 'f');\n break;\n\n case 'B':\n if (vfp && fields[C].len == 8) {\n out[R][C] = dd.read_shift(8, 'f');\n break;\n }\n\n /* falls through */\n\n case 'G':\n case 'P':\n dd.l += fields[C].len;\n break;\n\n case '0':\n if (fields[C].name === '_NullFlags') break;\n\n /* falls through */\n\n default:\n throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n }\n }\n }\n\n if (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 if (opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n return out;\n }\n\n function dbf_to_sheet(buf, opts) {\n var o = opts || {};\n if (!o.dateNF) o.dateNF = \"yyyymmdd\";\n return aoa_to_sheet(dbf_to_aoa(buf, o), o);\n }\n\n function dbf_to_workbook(buf, opts) {\n try {\n return sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n } catch (e) {\n if (opts && opts.WTF) throw e;\n }\n\n return {\n SheetNames: [],\n Sheets: {}\n };\n }\n\n var _RLEN = {\n 'B': 8,\n 'C': 250,\n 'L': 1,\n 'D': 8,\n '?': 0,\n '': 0\n };\n\n function sheet_to_dbf(ws, opts) {\n var o = opts || {};\n if (+o.codepage >= 0) set_cp(+o.codepage);\n if (o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n var ba = buf_array();\n var aoa = sheet_to_json(ws, {\n header: 1,\n raw: true,\n cellDates: true\n });\n var headers = aoa[0],\n data = aoa.slice(1);\n var i = 0,\n j = 0,\n hcnt = 0,\n rlen = 1;\n\n for (i = 0; i < headers.length; ++i) {\n if (i == null) continue;\n ++hcnt;\n if (typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n if (typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + typeof headers[i] + \"|\");\n if (headers.indexOf(headers[i]) !== i) for (j = 0; j < 1024; ++j) {\n if (headers.indexOf(headers[i] + \"_\" + j) == -1) {\n headers[i] += \"_\" + j;\n break;\n }\n }\n }\n\n var range = safe_decode_range(ws['!ref']);\n var coltypes = [];\n\n for (i = 0; i <= range.e.c - range.s.c; ++i) {\n var col = [];\n\n for (j = 0; j < data.length; ++j) {\n if (data[j][i] != null) col.push(data[j][i]);\n }\n\n if (col.length == 0 || headers[i] == null) {\n coltypes[i] = '?';\n continue;\n }\n\n var guess = '',\n _guess = '';\n\n for (j = 0; j < col.length; ++j) {\n switch (typeof col[j]) {\n /* TODO: check if L2 compat is desired */\n case 'number':\n _guess = 'B';\n break;\n\n case 'string':\n _guess = 'C';\n break;\n\n case 'boolean':\n _guess = 'L';\n break;\n\n case 'object':\n _guess = col[j] instanceof Date ? 'D' : 'C';\n break;\n\n default:\n _guess = 'C';\n }\n\n guess = guess && guess != _guess ? 'C' : _guess;\n if (guess == 'C') break;\n }\n\n rlen += _RLEN[guess] || 0;\n coltypes[i] = guess;\n }\n\n var h = ba.next(32);\n h.write_shift(4, 0x13021130);\n h.write_shift(4, data.length);\n h.write_shift(2, 296 + 32 * hcnt);\n h.write_shift(2, rlen);\n\n for (i = 0; i < 4; ++i) {\n h.write_shift(4, 0);\n }\n\n h.write_shift(4, 0x00000000 | (+dbf_reverse_map[current_ansi] || 0x03) << 8);\n\n for (i = 0, j = 0; i < headers.length; ++i) {\n if (headers[i] == null) continue;\n var hf = ba.next(32);\n\n var _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\n hf.write_shift(1, _f, \"sbcs\");\n hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n hf.write_shift(4, j);\n hf.write_shift(1, _RLEN[coltypes[i]] || 0);\n hf.write_shift(1, 0);\n hf.write_shift(1, 0x02);\n hf.write_shift(4, 0);\n hf.write_shift(1, 0);\n hf.write_shift(4, 0);\n hf.write_shift(4, 0);\n j += _RLEN[coltypes[i]] || 0;\n }\n\n var hb = ba.next(264);\n hb.write_shift(4, 0x0000000D);\n\n for (i = 0; i < 65; ++i) {\n hb.write_shift(4, 0x00000000);\n }\n\n for (i = 0; i < data.length; ++i) {\n var rout = ba.next(rlen);\n rout.write_shift(1, 0);\n\n for (j = 0; j < headers.length; ++j) {\n if (headers[j] == null) continue;\n\n switch (coltypes[j]) {\n case 'L':\n rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46);\n break;\n\n case 'B':\n rout.write_shift(8, data[i][j] || 0, 'f');\n break;\n\n case 'D':\n if (!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");else {\n rout.write_shift(4, (\"0000\" + data[i][j].getFullYear()).slice(-4), \"sbcs\");\n rout.write_shift(2, (\"00\" + (data[i][j].getMonth() + 1)).slice(-2), \"sbcs\");\n rout.write_shift(2, (\"00\" + data[i][j].getDate()).slice(-2), \"sbcs\");\n }\n break;\n\n case 'C':\n var _s = String(data[i][j] || \"\");\n\n rout.write_shift(1, _s, \"sbcs\");\n\n for (hcnt = 0; hcnt < 250 - _s.length; ++hcnt) {\n rout.write_shift(1, 0x20);\n }\n\n break;\n }\n } // data\n\n }\n\n ba.next(1).write_shift(1, 0x1A);\n return ba.end();\n }\n\n return {\n versions: DBF_SUPPORTED_VERSIONS,\n to_workbook: dbf_to_workbook,\n to_sheet: dbf_to_sheet,\n from_sheet: sheet_to_dbf\n };\n }();\n\n var SYLK = function () {\n /* TODO: stress test sequences */\n var sylk_escapes = {\n AA: 'À',\n BA: 'Á',\n CA: 'Â',\n DA: 195,\n HA: 'Ä',\n JA: 197,\n AE: 'È',\n BE: 'É',\n CE: 'Ê',\n HE: 'Ë',\n AI: 'Ì',\n BI: 'Í',\n CI: 'Î',\n HI: 'Ï',\n AO: 'Ò',\n BO: 'Ó',\n CO: 'Ô',\n DO: 213,\n HO: 'Ö',\n AU: 'Ù',\n BU: 'Ú',\n CU: 'Û',\n HU: 'Ü',\n Aa: 'à',\n Ba: 'á',\n Ca: 'â',\n Da: 227,\n Ha: 'ä',\n Ja: 229,\n Ae: 'è',\n Be: 'é',\n Ce: 'ê',\n He: 'ë',\n Ai: 'ì',\n Bi: 'í',\n Ci: 'î',\n Hi: 'ï',\n Ao: 'ò',\n Bo: 'ó',\n Co: 'ô',\n Do: 245,\n Ho: 'ö',\n Au: 'ù',\n Bu: 'ú',\n Cu: 'û',\n Hu: 'ü',\n KC: 'Ç',\n Kc: 'ç',\n q: 'æ',\n z: 'œ',\n a: 'Æ',\n j: 'Œ',\n DN: 209,\n Dn: 241,\n Hy: 255,\n S: 169,\n c: 170,\n R: 174,\n B: 180,\n 0: 176,\n 1: 177,\n 2: 178,\n 3: 179,\n 5: 181,\n 6: 182,\n 7: 183,\n Q: 185,\n k: 186,\n b: 208,\n i: 216,\n l: 222,\n s: 240,\n y: 248,\n \"!\": 161,\n '\"': 162,\n \"#\": 163,\n \"(\": 164,\n \"%\": 165,\n \"'\": 167,\n \"H \": 168,\n \"+\": 171,\n \";\": 187,\n \"<\": 188,\n \"=\": 189,\n \">\": 190,\n \"?\": 191,\n \"{\": 223\n };\n var sylk_char_regex = new RegExp(\"\\x1BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g, \"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\n var sylk_char_fn = function sylk_char_fn(_, $1) {\n var o = sylk_escapes[$1];\n return typeof o == \"number\" ? _getansi(o) : o;\n };\n\n var decode_sylk_char = function decode_sylk_char($$, $1, $2) {\n var newcc = $1.charCodeAt(0) - 0x20 << 4 | $2.charCodeAt(0) - 0x30;\n return newcc == 59 ? $$ : _getansi(newcc);\n };\n\n sylk_escapes[\"|\"] = 254;\n /* TODO: find an actual specification */\n\n function sylk_to_aoa(d, opts) {\n switch (opts.type) {\n case 'base64':\n return sylk_to_aoa_str(Base64.decode(d), opts);\n\n case 'binary':\n return sylk_to_aoa_str(d, opts);\n\n case 'buffer':\n return sylk_to_aoa_str(d.toString('binary'), opts);\n\n case 'array':\n return sylk_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function sylk_to_aoa_str(str, opts) {\n var records = str.split(/[\\n\\r]+/),\n R = -1,\n C = -1,\n ri = 0,\n rj = 0,\n arr = [];\n var formats = [];\n var next_cell_format = null;\n var sht = {},\n rowinfo = [],\n colinfo = [],\n cw = [];\n var Mval = 0,\n j;\n if (+opts.codepage >= 0) set_cp(+opts.codepage);\n\n for (; ri !== records.length; ++ri) {\n Mval = 0;\n var rstr = records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n var record = rstr.replace(/;;/g, \"\\0\").split(\";\").map(function (x) {\n return x.replace(/\\u0000/g, \";\");\n });\n var RT = record[0],\n val;\n if (rstr.length > 0) switch (RT) {\n case 'ID':\n break;\n\n /* header */\n\n case 'E':\n break;\n\n /* EOF */\n\n case 'B':\n break;\n\n /* dimensions */\n\n case 'O':\n break;\n\n /* options? */\n\n case 'P':\n if (record[1].charAt(0) == 'P') formats.push(rstr.slice(3).replace(/;;/g, \";\"));\n break;\n\n case 'C':\n var C_seen_K = false,\n C_seen_X = false;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n C_seen_X = true;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n if (!C_seen_X) C = 0;\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'K':\n val = record[rj].slice(1);\n if (val.charAt(0) === '\"') val = val.slice(1, val.length - 1);else if (val === 'TRUE') val = true;else if (val === 'FALSE') val = false;else if (!isNaN(fuzzynum(val))) {\n val = fuzzynum(val);\n if (next_cell_format !== null && SSF.is_date(next_cell_format)) val = numdate(val);\n } else if (!isNaN(fuzzydate(val).getDate())) {\n val = parseDate(val);\n }\n if (typeof cptable !== 'undefined' && typeof val == \"string\" && (opts || {}).type != \"string\" && (opts || {}).codepage) val = cptable.utils.decode(opts.codepage, val);\n C_seen_K = true;\n break;\n\n case 'E':\n var formula = rc_to_a1(record[rj].slice(1), {\n r: R,\n c: C\n });\n arr[R][C] = [arr[R][C], formula];\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (C_seen_K) {\n arr[R][C] = val;\n next_cell_format = null;\n }\n\n break;\n\n case 'F':\n var F_seen = 0;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n ++F_seen;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n /*C = 0;*/\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'M':\n Mval = parseInt(record[rj].slice(1)) / 20;\n break;\n\n case 'F':\n break;\n\n /* ??? */\n\n case 'G':\n break;\n\n /* hide grid */\n\n case 'P':\n next_cell_format = formats[parseInt(record[rj].slice(1))];\n break;\n\n case 'S':\n break;\n\n /* cell style */\n\n case 'D':\n break;\n\n /* column */\n\n case 'N':\n break;\n\n /* font */\n\n case 'W':\n cw = record[rj].slice(1).split(\" \");\n\n for (j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n Mval = parseInt(cw[2], 10);\n colinfo[j - 1] = Mval === 0 ? {\n hidden: true\n } : {\n wch: Mval\n };\n process_col(colinfo[j - 1]);\n }\n\n break;\n\n case 'C':\n /* default column format */\n C = parseInt(record[rj].slice(1)) - 1;\n if (!colinfo[C]) colinfo[C] = {};\n break;\n\n case 'R':\n /* row properties */\n R = parseInt(record[rj].slice(1)) - 1;\n if (!rowinfo[R]) rowinfo[R] = {};\n\n if (Mval > 0) {\n rowinfo[R].hpt = Mval;\n rowinfo[R].hpx = pt2px(Mval);\n } else if (Mval === 0) rowinfo[R].hidden = true;\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (F_seen < 1) next_cell_format = null;\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (rowinfo.length > 0) sht['!rows'] = rowinfo;\n if (colinfo.length > 0) sht['!cols'] = colinfo;\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return [arr, sht];\n }\n\n function sylk_to_sheet(d, opts) {\n var aoasht = sylk_to_aoa(d, opts);\n var aoa = aoasht[0],\n ws = aoasht[1];\n var o = aoa_to_sheet(aoa, opts);\n keys(ws).forEach(function (k) {\n o[k] = ws[k];\n });\n return o;\n }\n\n function sylk_to_workbook(d, opts) {\n return sheet_to_workbook(sylk_to_sheet(d, opts), opts);\n }\n\n function write_ws_cell_sylk(cell, ws, R, C) {\n var o = \"C;Y\" + (R + 1) + \";X\" + (C + 1) + \";K\";\n\n switch (cell.t) {\n case 'n':\n o += cell.v || 0;\n if (cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {\n r: R,\n c: C\n });\n break;\n\n case 'b':\n o += cell.v ? \"TRUE\" : \"FALSE\";\n break;\n\n case 'e':\n o += cell.w || cell.v;\n break;\n\n case 'd':\n o += '\"' + (cell.w || cell.v) + '\"';\n break;\n\n case 's':\n o += '\"' + cell.v.replace(/\"/g, \"\") + '\"';\n break;\n }\n\n return o;\n }\n\n function write_ws_cols_sylk(out, cols) {\n cols.forEach(function (col, i) {\n var rec = \"F;W\" + (i + 1) + \" \" + (i + 1) + \" \";\n if (col.hidden) rec += \"0\";else {\n if (typeof col.width == 'number') col.wpx = width2px(col.width);\n if (typeof col.wpx == 'number') col.wch = px2char(col.wpx);\n if (typeof col.wch == 'number') rec += Math.round(col.wch);\n }\n if (rec.charAt(rec.length - 1) != \" \") out.push(rec);\n });\n }\n\n function write_ws_rows_sylk(out, rows) {\n rows.forEach(function (row, i) {\n var rec = \"F;\";\n if (row.hidden) rec += \"M0;\";else if (row.hpt) rec += \"M\" + 20 * row.hpt + \";\";else if (row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n if (rec.length > 2) out.push(rec + \"R\" + (i + 1));\n });\n }\n\n function sheet_to_sylk(ws, opts) {\n var preamble = [\"ID;PWXL;N;E\"],\n o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n var RS = \"\\r\\n\";\n preamble.push(\"P;PGeneral\");\n preamble.push(\"F;P0;DG0G8;M255\");\n if (ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n if (ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n preamble.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\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n }\n }\n\n return preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n }\n\n return {\n to_workbook: sylk_to_workbook,\n to_sheet: sylk_to_sheet,\n from_sheet: sheet_to_sylk\n };\n }();\n\n var DIF = function () {\n function dif_to_aoa(d, opts) {\n switch (opts.type) {\n case 'base64':\n return dif_to_aoa_str(Base64.decode(d), opts);\n\n case 'binary':\n return dif_to_aoa_str(d, opts);\n\n case 'buffer':\n return dif_to_aoa_str(d.toString('binary'), opts);\n\n case 'array':\n return dif_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function dif_to_aoa_str(str, opts) {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr = [];\n\n for (; ri !== records.length; ++ri) {\n if (records[ri].trim() === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n }\n\n if (R < 0) continue;\n var metadata = records[ri].trim().split(\",\");\n var type = metadata[0],\n value = metadata[1];\n ++ri;\n var data = records[ri].trim();\n\n switch (+type) {\n case -1:\n if (data === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n } else if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\n break;\n\n case 0:\n if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);else if (!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);else arr[R][C] = value;\n ++C;\n break;\n\n case 1:\n data = data.slice(1, data.length - 1);\n arr[R][C++] = data !== '' ? data : null;\n break;\n }\n\n if (data === 'EOD') break;\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function dif_to_sheet(str, opts) {\n return aoa_to_sheet(dif_to_aoa(str, opts), opts);\n }\n\n function dif_to_workbook(str, opts) {\n return sheet_to_workbook(dif_to_sheet(str, opts), opts);\n }\n\n var sheet_to_dif = function () {\n var push_field = function pf(o, topic, v, n, s) {\n o.push(topic);\n o.push(v + \",\" + n);\n o.push('\"' + s.replace(/\"/g, '\"\"') + '\"');\n };\n\n var push_value = function po(o, type, v, s) {\n o.push(type + \",\" + v);\n o.push(type == 1 ? '\"' + s.replace(/\"/g, '\"\"') + '\"' : s);\n };\n\n return function sheet_to_dif(ws) {\n var o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n push_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n push_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1, \"\");\n push_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1, \"\");\n push_field(o, \"DATA\", 0, 0, \"\");\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n push_value(o, -1, 0, \"BOT\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell) {\n push_value(o, 1, 0, \"\");\n continue;\n }\n\n switch (cell.t) {\n case 'n':\n var val = DIF_XL ? cell.w : cell.v;\n if (!val && cell.v != null) val = cell.v;\n\n if (val == null) {\n if (DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);else push_value(o, 1, 0, \"\");\n } else push_value(o, 0, val, \"V\");\n\n break;\n\n case 'b':\n push_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n break;\n\n case 's':\n push_value(o, 1, 0, !DIF_XL || isNaN(cell.v) ? cell.v : '=\"' + cell.v + '\"');\n break;\n\n case 'd':\n if (!cell.w) cell.w = SSF.format(cell.z || SSF._table[14], datenum(parseDate(cell.v)));\n if (DIF_XL) push_value(o, 0, cell.w, \"V\");else push_value(o, 1, 0, cell.w);\n break;\n\n default:\n push_value(o, 1, 0, \"\");\n }\n }\n }\n\n push_value(o, -1, 0, \"EOD\");\n var RS = \"\\r\\n\";\n var oo = o.join(RS); //while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\n return oo;\n };\n }();\n\n return {\n to_workbook: dif_to_workbook,\n to_sheet: dif_to_sheet,\n from_sheet: sheet_to_dif\n };\n }();\n\n var ETH = function () {\n function decode(s) {\n return s.replace(/\\\\b/g, \"\\\\\").replace(/\\\\c/g, \":\").replace(/\\\\n/g, \"\\n\");\n }\n\n function encode(s) {\n return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g, \"\\\\n\");\n }\n\n function eth_to_aoa(str, opts) {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr = [];\n\n for (; ri !== records.length; ++ri) {\n var record = records[ri].trim().split(\":\");\n if (record[0] !== 'cell') continue;\n var addr = decode_cell(record[1]);\n if (arr.length <= addr.r) for (R = arr.length; R <= addr.r; ++R) {\n if (!arr[R]) arr[R] = [];\n }\n R = addr.r;\n C = addr.c;\n\n switch (record[2]) {\n case 't':\n arr[R][C] = decode(record[3]);\n break;\n\n case 'v':\n arr[R][C] = +record[3];\n break;\n\n case 'vtf':\n var _f = record[record.length - 1];\n\n /* falls through */\n\n case 'vtc':\n switch (record[3]) {\n case 'nl':\n arr[R][C] = +record[4] ? true : false;\n break;\n\n default:\n arr[R][C] = +record[4];\n break;\n }\n\n if (record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n }\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function eth_to_sheet(d, opts) {\n return aoa_to_sheet(eth_to_aoa(d, opts), opts);\n }\n\n function eth_to_workbook(d, opts) {\n return sheet_to_workbook(eth_to_sheet(d, opts), opts);\n }\n\n var header = [\"socialcalc:version:1.5\", \"MIME-Version: 1.0\", \"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"].join(\"\\n\");\n var sep = [\"--SocialCalcSpreadsheetControlSave\", \"Content-type: text/plain; charset=UTF-8\"].join(\"\\n\") + \"\\n\";\n /* TODO: the other parts */\n\n var meta = [\"# SocialCalc Spreadsheet Control Save\", \"part:sheet\"].join(\"\\n\");\n var end = \"--SocialCalcSpreadsheetControlSave--\";\n\n function sheet_to_eth_data(ws) {\n if (!ws || !ws['!ref']) return \"\";\n var o = [],\n oo = [],\n cell,\n coord = \"\";\n var r = decode_range(ws['!ref']);\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null || cell.t === 'z') continue;\n oo = [\"cell\", coord, 't'];\n\n switch (cell.t) {\n case 's':\n case 'str':\n oo.push(encode(cell.v));\n break;\n\n case 'n':\n if (!cell.f) {\n oo[2] = 'v';\n oo[3] = cell.v;\n } else {\n oo[2] = 'vtf';\n oo[3] = 'n';\n oo[4] = cell.v;\n oo[5] = encode(cell.f);\n }\n\n break;\n\n case 'b':\n oo[2] = 'vt' + (cell.f ? 'f' : 'c');\n oo[3] = 'nl';\n oo[4] = cell.v ? \"1\" : \"0\";\n oo[5] = encode(cell.f || (cell.v ? 'TRUE' : 'FALSE'));\n break;\n\n case 'd':\n var t = datenum(parseDate(cell.v));\n oo[2] = 'vtc';\n oo[3] = 'nd';\n oo[4] = \"\" + t;\n oo[5] = cell.w || SSF.format(cell.z || SSF._table[14], t);\n break;\n\n case 'e':\n continue;\n }\n\n o.push(oo.join(\":\"));\n }\n }\n\n o.push(\"sheet:c:\" + (r.e.c - r.s.c + 1) + \":r:\" + (r.e.r - r.s.r + 1) + \":tvf:1\");\n o.push(\"valueformat:1:text-wiki\"); //o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\n return o.join(\"\\n\");\n }\n\n function sheet_to_eth(ws) {\n return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\"); // return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n }\n\n return {\n to_workbook: eth_to_workbook,\n to_sheet: eth_to_sheet,\n from_sheet: sheet_to_eth\n };\n }();\n\n var PRN = function () {\n function set_text_arr(data, arr, R, C, o) {\n if (o.raw) arr[R][C] = data;else if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (data === \"\") {\n /* empty */\n } else if (!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);else if (!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);else arr[R][C] = data;\n }\n\n function prn_to_aoa_str(f, opts) {\n var o = opts || {};\n var arr = [];\n if (!f || f.length === 0) return arr;\n var lines = f.split(/[\\r\\n]/);\n var L = lines.length - 1;\n\n while (L >= 0 && lines[L].length === 0) {\n --L;\n }\n\n var start = 10,\n idx = 0;\n var R = 0;\n\n for (; R <= L; ++R) {\n idx = lines[R].indexOf(\" \");\n if (idx == -1) idx = lines[R].length;else idx++;\n start = Math.max(start, idx);\n }\n\n for (R = 0; R <= L; ++R) {\n arr[R] = [];\n /* TODO: confirm that widths are always 10 */\n\n var C = 0;\n set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\n for (C = 1; C <= (lines[R].length - start) / 10 + 1; ++C) {\n set_text_arr(lines[R].slice(start + (C - 1) * 10, start + C * 10).trim(), arr, R, C, o);\n }\n }\n\n if (o.sheetRows) arr = arr.slice(0, o.sheetRows);\n return arr;\n } // List of accepted CSV separators\n\n\n var guess_seps = {\n 0x2C: ',',\n 0x09: \"\\t\",\n 0x3B: ';'\n }; // CSV separator weights to be used in case of equal numbers\n\n var guess_sep_weights = {\n 0x2C: 3,\n 0x09: 2,\n 0x3B: 1\n };\n\n function guess_sep(str) {\n var cnt = {},\n instr = false,\n end = 0,\n cc = 0;\n\n for (; end < str.length; ++end) {\n if ((cc = str.charCodeAt(end)) == 0x22) instr = !instr;else if (!instr && cc in guess_seps) cnt[cc] = (cnt[cc] || 0) + 1;\n }\n\n cc = [];\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n\n if (!cc.length) {\n cnt = guess_sep_weights;\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n }\n\n cc.sort(function (a, b) {\n return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];\n });\n return guess_seps[cc.pop()[1]];\n }\n\n function dsv_to_sheet_str(str, opts) {\n var o = opts || {};\n var sep = \"\";\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ws = o.dense ? [] : {};\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n\n if (str.slice(0, 4) == \"sep=\") {\n // If the line ends in \\r\\n\n if (str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10) {\n sep = str.charAt(4);\n str = str.slice(7);\n } // If line ends in \\r OR \\n\n else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {\n //\n sep = str.charAt(4);\n str = str.slice(6);\n }\n } else sep = guess_sep(str.slice(0, 1024));\n\n var R = 0,\n C = 0,\n v = 0;\n var start = 0,\n end = 0,\n sepcc = sep.charCodeAt(0),\n instr = false,\n cc = 0;\n str = str.replace(/\\r\\n/mg, \"\\n\");\n\n var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\n function finish_cell() {\n var s = str.slice(start, end);\n var cell = {};\n if (s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1, -1).replace(/\"\"/g, '\"');\n if (s.length === 0) cell.t = 'z';else if (o.raw) {\n cell.t = 's';\n cell.v = s;\n } else if (s.trim().length === 0) {\n cell.t = 's';\n cell.v = s;\n } else if (s.charCodeAt(0) == 0x3D) {\n if (s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) {\n cell.t = 's';\n cell.v = s.slice(2, -1).replace(/\"\"/g, '\"');\n } else if (fuzzyfmla(s)) {\n cell.t = 'n';\n cell.f = s.slice(1);\n } else {\n cell.t = 's';\n cell.v = s;\n }\n } else if (s == \"TRUE\") {\n cell.t = 'b';\n cell.v = true;\n } else if (s == \"FALSE\") {\n cell.t = 'b';\n cell.v = false;\n } else if (!isNaN(v = fuzzynum(s))) {\n cell.t = 'n';\n if (o.cellText !== false) cell.w = s;\n cell.v = v;\n } else if (!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n cell.z = o.dateNF || SSF._table[14];\n var k = 0;\n\n if (_re && s.match(_re)) {\n s = dateNF_fix(s, o.dateNF, s.match(_re) || []);\n k = 1;\n }\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.v = parseDate(s, k);\n } else {\n cell.t = 'n';\n cell.v = datenum(parseDate(s, k));\n }\n\n if (o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v) : cell.v);\n if (!o.cellNF) delete cell.z;\n } else {\n cell.t = 's';\n cell.v = s;\n }\n\n if (cell.t == 'z') {} else if (o.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = cell;\n } else ws[encode_cell({\n c: C,\n r: R\n })] = cell;\n\n start = end + 1;\n if (range.e.c < C) range.e.c = C;\n if (range.e.r < R) range.e.r = R;\n if (cc == sepcc) ++C;else {\n C = 0;\n ++R;\n if (o.sheetRows && o.sheetRows <= R) return true;\n }\n }\n\n outer: for (; end < str.length; ++end) {\n switch (cc = str.charCodeAt(end)) {\n case 0x22:\n instr = !instr;\n break;\n\n case sepcc:\n case 0x0a:\n case 0x0d:\n if (!instr && finish_cell()) break outer;\n break;\n\n default:\n break;\n }\n }\n\n if (end - start > 0) finish_cell();\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function prn_to_sheet_str(str, opts) {\n if (!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n if (str.slice(0, 4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n if (str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n }\n\n function prn_to_sheet(d, opts) {\n var str = \"\",\n bytes = opts.type == 'string' ? [0, 0, 0, 0] : firstbyte(d, opts);\n\n switch (opts.type) {\n case 'base64':\n str = Base64.decode(d);\n break;\n\n case 'binary':\n str = d;\n break;\n\n case 'buffer':\n if (opts.codepage == 65001) str = d.toString('utf8');else if (opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d);else str = d.toString('binary');\n break;\n\n case 'array':\n str = cc2str(d);\n break;\n\n case 'string':\n str = d;\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));else if (opts.type == 'binary' && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(1252, str));\n if (str.slice(0, 19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n return prn_to_sheet_str(str, opts);\n }\n\n function prn_to_workbook(d, opts) {\n return sheet_to_workbook(prn_to_sheet(d, opts), opts);\n }\n\n function sheet_to_prn(ws) {\n var o = [];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n var oo = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell || cell.v == null) {\n oo.push(\" \");\n continue;\n }\n\n var w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0, 10);\n\n while (w.length < 10) {\n w += \" \";\n }\n\n oo.push(w + (C === 0 ? \" \" : \"\"));\n }\n\n o.push(oo.join(\"\"));\n }\n\n return o.join(\"\\n\");\n }\n\n return {\n to_workbook: prn_to_workbook,\n to_sheet: prn_to_sheet,\n from_sheet: sheet_to_prn\n };\n }();\n /* Excel defaults to SYLK but warns if data is not valid */\n\n\n function read_wb_ID(d, opts) {\n var o = opts || {},\n OLD_WTF = !!o.WTF;\n o.WTF = true;\n\n try {\n var out = SYLK.to_workbook(d, o);\n o.WTF = OLD_WTF;\n return out;\n } catch (e) {\n o.WTF = OLD_WTF;\n if (!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n return PRN.to_workbook(d, opts);\n }\n }\n\n var WK_ = function () {\n function lotushopper(data, cb, opts) {\n if (!data) return;\n prep_blob(data, data.l || 0);\n var Enum = opts.Enum || WK1Enum;\n\n while (data.l < data.length) {\n var RT = data.read_shift(2);\n var R = Enum[RT] || Enum[0xFF];\n var length = data.read_shift(2);\n var tgt = data.l + length;\n var d = (R.f || parsenoop)(data, length, opts);\n data.l = tgt;\n if (cb(d, R.n, RT)) return;\n }\n }\n\n function lotus_to_workbook(d, opts) {\n switch (opts.type) {\n case 'base64':\n return lotus_to_workbook_buf(s2a(Base64.decode(d)), opts);\n\n case 'binary':\n return lotus_to_workbook_buf(s2a(d), opts);\n\n case 'buffer':\n case 'array':\n return lotus_to_workbook_buf(d, opts);\n }\n\n throw \"Unsupported type \" + opts.type;\n }\n\n function lotus_to_workbook_buf(d, opts) {\n if (!d) return d;\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var s = o.dense ? [] : {},\n n = \"Sheet1\",\n sidx = 0;\n var sheets = {},\n snames = [n];\n var refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var sheetRows = o.sheetRows || 0;\n if (d[2] == 0x02) o.Enum = WK1Enum;else if (d[2] == 0x1a) o.Enum = WK3Enum;else if (d[2] == 0x0e) {\n o.Enum = WK3Enum;\n o.qpro = true;\n d.l = 0;\n } else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n lotushopper(d, function (val, Rn, RT) {\n if (d[2] == 0x02) switch (RT) {\n case 0x00:\n o.vers = val;\n if (val >= 0x1000) o.qpro = true;\n break;\n\n case 0x06:\n refguess = val;\n break;\n\n /* RANGE */\n\n case 0x0F:\n /* LABEL */\n if (!o.qpro) val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x0D:\n /* INTEGER */\n\n case 0x0E:\n /* NUMBER */\n\n case 0x10:\n /* FORMULA */\n\n case 0x33:\n /* STRING */\n\n /* TODO: actual translation of the format code */\n if (RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n val[1].z = o.dateNF || SSF._table[14];\n\n if (o.cellDates) {\n val[1].t = 'd';\n val[1].v = numdate(val[1].v);\n }\n }\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n break;\n } else switch (RT) {\n case 0x16:\n /* LABEL16 */\n val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x17:\n /* NUMBER17 */\n\n case 0x18:\n /* NUMBER18 */\n\n case 0x19:\n /* FORMULA19 */\n\n case 0x25:\n /* NUMBER25 */\n\n case 0x27:\n /* NUMBER27 */\n\n case 0x28:\n /* FORMULA28 */\n if (val[3] > sidx) {\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n s = o.dense ? [] : {};\n refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n sidx = val[3];\n n = \"Sheet\" + (sidx + 1);\n snames.push(n);\n }\n\n if (sheetRows > 0 && val[0].r >= sheetRows) break;\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n if (refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n if (refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n break;\n\n default:\n break;\n }\n }, o);\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n return {\n SheetNames: snames,\n Sheets: sheets\n };\n }\n\n function parse_RANGE(blob) {\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n o.s.c = blob.read_shift(2);\n o.s.r = blob.read_shift(2);\n o.e.c = blob.read_shift(2);\n o.e.r = blob.read_shift(2);\n if (o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n return o;\n }\n\n function parse_cell(blob, length, opts) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0];\n\n if (opts.qpro && opts.vers != 0x5120) {\n o[0].c = blob.read_shift(1);\n blob.l++;\n o[0].r = blob.read_shift(2);\n blob.l += 2;\n } else {\n o[2] = blob.read_shift(1);\n o[0].c = blob.read_shift(2);\n o[0].r = blob.read_shift(2);\n }\n\n return o;\n }\n\n function parse_LABEL(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n o[1].t = 's';\n\n if (opts.vers == 0x5120) {\n blob.l++;\n var len = blob.read_shift(1);\n o[1].v = blob.read_shift(len, 'utf8');\n return o;\n }\n\n if (opts.qpro) blob.l++;\n o[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n return o;\n }\n\n function parse_INTEGER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(2, 'i');\n return o;\n }\n\n function parse_NUMBER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(8, 'f');\n return o;\n }\n\n function parse_FORMULA(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n /* TODO: formula */\n\n o[1].v = blob.read_shift(8, 'f');\n if (opts.qpro) blob.l = tgt;else {\n var flen = blob.read_shift(2);\n blob.l += flen;\n }\n return o;\n }\n\n function parse_cell_3(blob) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0];\n o[0].r = blob.read_shift(2);\n o[3] = blob[blob.l++];\n o[0].c = blob[blob.l++];\n return o;\n }\n\n function parse_LABEL_16(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].t = 's';\n o[1].v = blob.read_shift(length - 4, 'cstr');\n return o;\n }\n\n function parse_NUMBER_18(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].v = blob.read_shift(2);\n var v = o[1].v >> 1;\n /* TODO: figure out all of the corner cases */\n\n if (o[1].v & 0x1) {\n switch (v & 0x07) {\n case 1:\n v = (v >> 3) * 500;\n break;\n\n case 2:\n v = (v >> 3) / 20;\n break;\n\n case 4:\n v = (v >> 3) / 2000;\n break;\n\n case 6:\n v = (v >> 3) / 16;\n break;\n\n case 7:\n v = (v >> 3) / 64;\n break;\n\n default:\n throw \"unknown NUMBER_18 encoding \" + (v & 0x07);\n }\n }\n\n o[1].v = v;\n return o;\n }\n\n function parse_NUMBER_17(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n var v2 = blob.read_shift(4);\n var e = blob.read_shift(2);\n\n if (e == 0xFFFF) {\n o[1].v = 0;\n return o;\n }\n\n var s = e & 0x8000;\n e = (e & 0x7FFF) - 16446;\n o[1].v = (s * 2 - 1) * ((e > 0 ? v2 << e : v2 >>> -e) + (e > -32 ? v1 << e + 32 : v1 >>> -(e + 32)));\n return o;\n }\n\n function parse_FORMULA_19(blob, length) {\n var o = parse_NUMBER_17(blob, 14);\n blob.l += length - 14;\n /* TODO: formula */\n\n return o;\n }\n\n function parse_NUMBER_25(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n o[1].v = v1 >> 6;\n return o;\n }\n\n function parse_NUMBER_27(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(8, 'f');\n o[1].v = v1;\n return o;\n }\n\n function parse_FORMULA_28(blob, length) {\n var o = parse_NUMBER_27(blob, 14);\n blob.l += length - 10;\n /* TODO: formula */\n\n return o;\n }\n\n var WK1Enum = {\n 0x0000: {\n n: \"BOF\",\n f: parseuint16\n },\n 0x0001: {\n n: \"EOF\"\n },\n 0x0002: {\n n: \"CALCMODE\"\n },\n 0x0003: {\n n: \"CALCORDER\"\n },\n 0x0004: {\n n: \"SPLIT\"\n },\n 0x0005: {\n n: \"SYNC\"\n },\n 0x0006: {\n n: \"RANGE\",\n f: parse_RANGE\n },\n 0x0007: {\n n: \"WINDOW1\"\n },\n 0x0008: {\n n: \"COLW1\"\n },\n 0x0009: {\n n: \"WINTWO\"\n },\n 0x000A: {\n n: \"COLW2\"\n },\n 0x000B: {\n n: \"NAME\"\n },\n 0x000C: {\n n: \"BLANK\"\n },\n 0x000D: {\n n: \"INTEGER\",\n f: parse_INTEGER\n },\n 0x000E: {\n n: \"NUMBER\",\n f: parse_NUMBER\n },\n 0x000F: {\n n: \"LABEL\",\n f: parse_LABEL\n },\n 0x0010: {\n n: \"FORMULA\",\n f: parse_FORMULA\n },\n 0x0018: {\n n: \"TABLE\"\n },\n 0x0019: {\n n: \"ORANGE\"\n },\n 0x001A: {\n n: \"PRANGE\"\n },\n 0x001B: {\n n: \"SRANGE\"\n },\n 0x001C: {\n n: \"FRANGE\"\n },\n 0x001D: {\n n: \"KRANGE1\"\n },\n 0x0020: {\n n: \"HRANGE\"\n },\n 0x0023: {\n n: \"KRANGE2\"\n },\n 0x0024: {\n n: \"PROTEC\"\n },\n 0x0025: {\n n: \"FOOTER\"\n },\n 0x0026: {\n n: \"HEADER\"\n },\n 0x0027: {\n n: \"SETUP\"\n },\n 0x0028: {\n n: \"MARGINS\"\n },\n 0x0029: {\n n: \"LABELFMT\"\n },\n 0x002A: {\n n: \"TITLES\"\n },\n 0x002B: {\n n: \"SHEETJS\"\n },\n 0x002D: {\n n: \"GRAPH\"\n },\n 0x002E: {\n n: \"NGRAPH\"\n },\n 0x002F: {\n n: \"CALCCOUNT\"\n },\n 0x0030: {\n n: \"UNFORMATTED\"\n },\n 0x0031: {\n n: \"CURSORW12\"\n },\n 0x0032: {\n n: \"WINDOW\"\n },\n 0x0033: {\n n: \"STRING\",\n f: parse_LABEL\n },\n 0x0037: {\n n: \"PASSWORD\"\n },\n 0x0038: {\n n: \"LOCKED\"\n },\n 0x003C: {\n n: \"QUERY\"\n },\n 0x003D: {\n n: \"QUERYNAME\"\n },\n 0x003E: {\n n: \"PRINT\"\n },\n 0x003F: {\n n: \"PRINTNAME\"\n },\n 0x0040: {\n n: \"GRAPH2\"\n },\n 0x0041: {\n n: \"GRAPHNAME\"\n },\n 0x0042: {\n n: \"ZOOM\"\n },\n 0x0043: {\n n: \"SYMSPLIT\"\n },\n 0x0044: {\n n: \"NSROWS\"\n },\n 0x0045: {\n n: \"NSCOLS\"\n },\n 0x0046: {\n n: \"RULER\"\n },\n 0x0047: {\n n: \"NNAME\"\n },\n 0x0048: {\n n: \"ACOMM\"\n },\n 0x0049: {\n n: \"AMACRO\"\n },\n 0x004A: {\n n: \"PARSE\"\n },\n 0x00FF: {\n n: \"\",\n f: parsenoop\n }\n };\n var WK3Enum = {\n 0x0000: {\n n: \"BOF\"\n },\n 0x0001: {\n n: \"EOF\"\n },\n 0x0003: {\n n: \"??\"\n },\n 0x0004: {\n n: \"??\"\n },\n 0x0005: {\n n: \"??\"\n },\n 0x0006: {\n n: \"??\"\n },\n 0x0007: {\n n: \"??\"\n },\n 0x0009: {\n n: \"??\"\n },\n 0x000a: {\n n: \"??\"\n },\n 0x000b: {\n n: \"??\"\n },\n 0x000c: {\n n: \"??\"\n },\n 0x000e: {\n n: \"??\"\n },\n 0x000f: {\n n: \"??\"\n },\n 0x0010: {\n n: \"??\"\n },\n 0x0011: {\n n: \"??\"\n },\n 0x0012: {\n n: \"??\"\n },\n 0x0013: {\n n: \"??\"\n },\n 0x0015: {\n n: \"??\"\n },\n 0x0016: {\n n: \"LABEL16\",\n f: parse_LABEL_16\n },\n 0x0017: {\n n: \"NUMBER17\",\n f: parse_NUMBER_17\n },\n 0x0018: {\n n: \"NUMBER18\",\n f: parse_NUMBER_18\n },\n 0x0019: {\n n: \"FORMULA19\",\n f: parse_FORMULA_19\n },\n 0x001a: {\n n: \"??\"\n },\n 0x001b: {\n n: \"??\"\n },\n 0x001c: {\n n: \"??\"\n },\n 0x001d: {\n n: \"??\"\n },\n 0x001e: {\n n: \"??\"\n },\n 0x001f: {\n n: \"??\"\n },\n 0x0021: {\n n: \"??\"\n },\n 0x0025: {\n n: \"NUMBER25\",\n f: parse_NUMBER_25\n },\n 0x0027: {\n n: \"NUMBER27\",\n f: parse_NUMBER_27\n },\n 0x0028: {\n n: \"FORMULA28\",\n f: parse_FORMULA_28\n },\n 0x00FF: {\n n: \"\",\n f: parsenoop\n }\n };\n return {\n to_workbook: lotus_to_workbook\n };\n }();\n /* 18.4.7 rPr CT_RPrElt */\n\n\n function parse_rpr(rpr) {\n var font = {},\n m = rpr.match(tagregex),\n i = 0;\n var pass = false;\n if (m) for (; i != m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (y[0].replace(/\\w*:/g, \"\")) {\n /* 18.8.12 condense CT_BooleanProperty */\n\n /* ** not required . */\n case '':\n case '':\n font.shadow = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty TODO */\n\n case '':\n case '':\n font.outline = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.5 rFont CT_FontName */\n\n case '':\n case '':\n font.strike = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n case '':\n font.u = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.2 b */\n\n case '':\n case '':\n font.b = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.26 i */\n\n case '':\n case '':\n font.i = 1;\n break;\n\n case '':\n break;\n\n /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n }\n }\n return font;\n }\n\n var parse_rs = function () {\n var tregex = matchtag(\"t\"),\n rpregex = matchtag(\"rPr\");\n /* 18.4.4 r CT_RElt */\n\n function parse_r(r) {\n /* 18.4.12 t ST_Xstring */\n var t = r.match(tregex)\n /*, cp = 65001*/\n ;\n if (!t) return {\n t: \"s\",\n v: \"\"\n };\n var o = {\n t: 's',\n v: unescapexml(t[1])\n };\n var rpr = r.match(rpregex);\n if (rpr) o.s = parse_rpr(rpr[1]);\n return o;\n }\n\n var rregex = /<(?:\\w+:)?r>/g,\n rend = /<\\/(?:\\w+:)?r>/;\n return function parse_rs(rs) {\n return rs.replace(rregex, \"\").split(rend).map(parse_r).filter(function (r) {\n return r.v;\n });\n };\n }();\n /* Parse a list of tags */\n\n\n var rs_to_html = function parse_rs_factory() {\n var nlregex = /(\\r\\n|\\n)/g;\n\n function parse_rpr2(font, intro, outro) {\n var style = [];\n if (font.u) style.push(\"text-decoration: underline;\");\n if (font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n if (font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n if (font.outline) style.push(\"text-effect: outline;\");\n if (font.shadow) style.push(\"text-shadow: auto;\");\n intro.push('');\n\n if (font.b) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.i) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.strike) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n var align = font.valign || \"\";\n if (align == \"superscript\" || align == \"super\") align = \"sup\";else if (align == \"subscript\") align = \"sub\";\n\n if (align != \"\") {\n intro.push(\"<\" + align + \">\");\n outro.push(\"\" + align + \">\");\n }\n\n outro.push(\"\");\n return font;\n }\n /* 18.4.4 r CT_RElt */\n\n\n function r_to_html(r) {\n var terms = [[], r.v, []];\n if (!r.v) return \"\";\n if (r.s) parse_rpr2(r.s, terms[0], terms[2]);\n return terms[0].join(\"\") + terms[1].replace(nlregex, '
') + terms[2].join(\"\");\n }\n\n return function parse_rs(rs) {\n return rs.map(r_to_html).join(\"\");\n };\n }();\n /* 18.4.8 si CT_Rst */\n\n\n var sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g,\n sirregex = /<(?:\\w+:)?r>/;\n var sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\n\n function parse_si(x, opts) {\n var html = opts ? opts.cellHTML : true;\n var z = {};\n if (!x) return {\n t: \"\"\n }; //var y;\n\n /* 18.4.12 t ST_Xstring (Plaintext String) */\n // TODO: is whitespace actually valid here?\n\n if (x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n z.t = unescapexml(utf8read(x.slice(x.indexOf(\">\") + 1).split(/<\\/(?:\\w+:)?t>/)[0] || \"\"));\n z.r = utf8read(x);\n if (html) z.h = escapehtml(z.t);\n }\n /* 18.4.4 r CT_RElt (Rich Text Run) */\n else if (\n /*y = */\n x.match(sirregex)) {\n z.r = utf8read(x);\n z.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex) || []).join(\"\").replace(tagregex, \"\")));\n if (html) z.h = rs_to_html(parse_rs(z.r));\n }\n /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\n /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\n\n return z;\n }\n /* 18.4 Shared String Table */\n\n\n var sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\n var sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\n var sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\n\n function parse_sst_xml(data, opts) {\n var s = [],\n ss = \"\";\n if (!data) return s;\n /* 18.4.9 sst CT_Sst */\n\n var sst = data.match(sstr0);\n\n if (sst) {\n ss = sst[2].replace(sstr1, \"\").split(sstr2);\n\n for (var i = 0; i != ss.length; ++i) {\n var o = parse_si(ss[i].trim(), opts);\n if (o != null) s[s.length] = o;\n }\n\n sst = parsexmltag(sst[1]);\n s.Count = sst.count;\n s.Unique = sst.uniqueCount;\n }\n\n return s;\n }\n\n RELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\n var straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\n\n function write_sst_xml(sst, opts) {\n if (!opts.bookSST) return \"\";\n var o = [XML_HEADER];\n o[o.length] = writextag('sst', null, {\n xmlns: XMLNS.main[0],\n count: sst.Count,\n uniqueCount: sst.Unique\n });\n\n for (var i = 0; i != sst.length; ++i) {\n if (sst[i] == null) continue;\n var s = sst[i];\n var sitag = \"\";\n if (s.r) sitag += s.r;else {\n sitag += \"\" + escapexml(s.t) + \"\";\n }\n sitag += \"\";\n o[o.length] = sitag;\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.221 BrtBeginSst */\n\n\n function parse_BrtBeginSst(data) {\n return [data.read_shift(4), data.read_shift(4)];\n }\n /* [MS-XLSB] 2.1.7.45 Shared Strings */\n\n\n function parse_sst_bin(data, opts) {\n var s = [];\n var pass = false;\n recordhopper(data, function hopper_sst(val, R_n, RT) {\n switch (RT) {\n case 0x009F:\n /* 'BrtBeginSst' */\n s.Count = val[0];\n s.Unique = val[1];\n break;\n\n case 0x0013:\n /* 'BrtSSTItem' */\n s.push(val);\n break;\n\n case 0x00A0:\n /* 'BrtEndSst' */\n return true;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n default:\n if (R_n.indexOf(\"Begin\") > 0) {\n /* empty */\n } else if (R_n.indexOf(\"End\") > 0) {\n /* empty */\n }\n\n if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n });\n return s;\n }\n\n function write_BrtBeginSst(sst, o) {\n if (!o) o = new_buf(8);\n o.write_shift(4, sst.Count);\n o.write_shift(4, sst.Unique);\n return o;\n }\n\n var write_BrtSSTItem = write_RichStr;\n\n function write_sst_bin(sst) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\n for (var i = 0; i < sst.length; ++i) {\n write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n }\n /* FRTSST */\n\n\n write_record(ba, \"BrtEndSst\");\n return ba.end();\n }\n\n function _JS2ANSI(str) {\n if (typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n var o = [],\n oo = str.split(\"\");\n\n for (var i = 0; i < oo.length; ++i) {\n o[i] = oo[i].charCodeAt(0);\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.4 Version */\n\n\n function parse_CRYPTOVersion(blob, length) {\n var o = {};\n o.Major = blob.read_shift(2);\n o.Minor = blob.read_shift(2);\n if (length >= 4) blob.l += length - 4;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\n\n\n function parse_DataSpaceVersionInfo(blob) {\n var o = {};\n o.id = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\n\n\n function parse_DataSpaceMapEntry(blob) {\n var len = blob.read_shift(4);\n var end = blob.l + len - 4;\n var o = {};\n var cnt = blob.read_shift(4);\n var comps = [];\n /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\n while (cnt-- > 0) {\n comps.push({\n t: blob.read_shift(4),\n v: blob.read_shift(0, 'lpp4')\n });\n }\n\n o.name = blob.read_shift(0, 'lpp4');\n o.comps = comps;\n if (blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\n\n\n function parse_DataSpaceMap(blob) {\n var o = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(parse_DataSpaceMapEntry(blob));\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\n\n\n function parse_DataSpaceDefinition(blob) {\n var o = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(blob.read_shift(0, 'lpp4'));\n }\n\n return o;\n }\n /* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\n\n\n function parse_TransformInfoHeader(blob) {\n var o = {};\n /*var len = */\n\n blob.read_shift(4);\n blob.l += 4; // must be 0x1\n\n o.id = blob.read_shift(0, 'lpp4');\n o.name = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n }\n\n function parse_Primary(blob) {\n /* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n var hdr = parse_TransformInfoHeader(blob);\n /* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\n hdr.ename = blob.read_shift(0, '8lpp4');\n hdr.blksz = blob.read_shift(4);\n hdr.cmode = blob.read_shift(4);\n if (blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n return hdr;\n }\n /* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\n\n\n function parse_EncryptionHeader(blob, length) {\n var tgt = blob.l + length;\n var o = {};\n o.Flags = blob.read_shift(4) & 0x3F;\n blob.l += 4;\n o.AlgID = blob.read_shift(4);\n var valid = false;\n\n switch (o.AlgID) {\n case 0x660E:\n case 0x660F:\n case 0x6610:\n valid = o.Flags == 0x24;\n break;\n\n case 0x6801:\n valid = o.Flags == 0x04;\n break;\n\n case 0:\n valid = o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24;\n break;\n\n default:\n throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n }\n\n if (!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n o.AlgIDHash = blob.read_shift(4);\n o.KeySize = blob.read_shift(4);\n o.ProviderType = blob.read_shift(4);\n blob.l += 8;\n o.CSPName = blob.read_shift(tgt - blob.l >> 1, 'utf16le');\n blob.l = tgt;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\n\n\n function parse_EncryptionVerifier(blob, length) {\n var o = {},\n tgt = blob.l + length;\n blob.l += 4; // SaltSize must be 0x10\n\n o.Salt = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n o.Verifier = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n /*var sz = */\n\n blob.read_shift(4);\n o.VerifierHash = blob.slice(blob.l, tgt);\n blob.l = tgt;\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\n\n\n function parse_EncryptionInfo(blob) {\n var vers = parse_CRYPTOVersion(blob);\n\n switch (vers.Minor) {\n case 0x02:\n return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\n case 0x03:\n return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\n case 0x04:\n return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n }\n\n throw new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n }\n /* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\n\n\n function parse_EncInfoStd(blob) {\n var flags = blob.read_shift(4);\n if ((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n var sz = blob.read_shift(4); //var tgt = blob.l + sz;\n\n var hdr = parse_EncryptionHeader(blob, sz);\n var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n return {\n t: \"Std\",\n h: hdr,\n v: verifier\n };\n }\n /* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\n\n\n function parse_EncInfoExt() {\n throw new Error(\"File is password-protected: ECMA-376 Extensible\");\n }\n /* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\n\n\n function parse_EncInfoAgl(blob) {\n var KeyData = [\"saltSize\", \"blockSize\", \"keyBits\", \"hashSize\", \"cipherAlgorithm\", \"cipherChaining\", \"hashAlgorithm\", \"saltValue\"];\n blob.l += 4;\n var xml = blob.read_shift(blob.length - blob.l, 'utf8');\n var o = {};\n xml.replace(tagregex, function xml_agile(x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n case ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n o.Flags = blob.read_shift(4);\n length -= 4;\n var sz = blob.read_shift(4);\n length -= 4;\n o.EncryptionHeader = parse_EncryptionHeader(blob, sz);\n length -= sz;\n o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\n\n\n function parse_RC4Header(blob) {\n var o = {};\n var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n if (vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n o.Salt = blob.read_shift(16);\n o.EncryptedVerifier = blob.read_shift(16);\n o.EncryptedVerifierHash = blob.read_shift(16);\n return o;\n }\n /* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\n\n\n function crypto_CreatePasswordVerifier_Method1(Password) {\n var Verifier = 0x0000,\n PasswordArray;\n\n var PasswordDecoded = _JS2ANSI(Password);\n\n var len = PasswordDecoded.length + 1,\n i,\n PasswordByte;\n var Intermediate1, Intermediate2, Intermediate3;\n PasswordArray = new_raw_buf(len);\n PasswordArray[0] = PasswordDecoded.length;\n\n for (i = 1; i != len; ++i) {\n PasswordArray[i] = PasswordDecoded[i - 1];\n }\n\n for (i = len - 1; i >= 0; --i) {\n PasswordByte = PasswordArray[i];\n Intermediate1 = (Verifier & 0x4000) === 0x0000 ? 0 : 1;\n Intermediate2 = Verifier << 1 & 0x7FFF;\n Intermediate3 = Intermediate1 | Intermediate2;\n Verifier = Intermediate3 ^ PasswordByte;\n }\n\n return Verifier ^ 0xCE4B;\n }\n /* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\n\n\n var crypto_CreateXorArray_Method1 = function () {\n var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n var 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\n var Ror = function Ror(Byte) {\n return (Byte / 2 | Byte * 128) & 0xFF;\n };\n\n var XorRor = function XorRor(byte1, byte2) {\n return Ror(byte1 ^ byte2);\n };\n\n var CreateXorKey_Method1 = function CreateXorKey_Method1(Password) {\n var XorKey = InitialCode[Password.length - 1];\n var CurrentElement = 0x68;\n\n for (var i = Password.length - 1; i >= 0; --i) {\n var Char = Password[i];\n\n for (var j = 0; j != 7; ++j) {\n if (Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n Char *= 2;\n --CurrentElement;\n }\n }\n\n return XorKey;\n };\n\n return function (password) {\n var Password = _JS2ANSI(password);\n\n var XorKey = CreateXorKey_Method1(Password);\n var Index = Password.length;\n var ObfuscationArray = new_raw_buf(16);\n\n for (var i = 0; i != 16; ++i) {\n ObfuscationArray[i] = 0x00;\n }\n\n var Temp, PasswordLastChar, PadIndex;\n\n if ((Index & 1) === 1) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n PasswordLastChar = Password[Password.length - 1];\n ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n }\n\n while (Index > 0) {\n --Index;\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n }\n\n Index = 15;\n PadIndex = 15 - Password.length;\n\n while (PadIndex > 0) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n --Index;\n --PadIndex;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n --PadIndex;\n }\n\n return ObfuscationArray;\n };\n }();\n /* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\n\n\n var crypto_DecryptData_Method1 = function crypto_DecryptData_Method1(password, Data, XorArrayIndex, XorArray, O) {\n /* If XorArray is set, use it; if O is not set, make changes in-place */\n if (!O) O = Data;\n if (!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n var Index, Value;\n\n for (Index = 0; Index != Data.length; ++Index) {\n Value = Data[Index];\n Value ^= XorArray[XorArrayIndex];\n Value = (Value >> 5 | Value << 3) & 0xFF;\n O[Index] = Value;\n ++XorArrayIndex;\n }\n\n return [O, XorArrayIndex, XorArray];\n };\n\n var crypto_MakeXorDecryptor = function crypto_MakeXorDecryptor(password) {\n var XorArrayIndex = 0,\n XorArray = crypto_CreateXorArray_Method1(password);\n return function (Data) {\n var O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n XorArrayIndex = O[1];\n return O[0];\n };\n };\n /* 2.5.343 */\n\n\n function parse_XORObfuscation(blob, length, opts, out) {\n var o = {\n key: parseuint16(blob),\n verificationBytes: parseuint16(blob)\n };\n if (opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n out.valid = o.verificationBytes === o.verifier;\n if (out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n return o;\n }\n /* 2.4.117 */\n\n\n function parse_FilePassHeader(blob, length, oo) {\n var o = oo || {};\n o.Info = blob.read_shift(2);\n blob.l -= 2;\n if (o.Info === 1) o.Data = parse_RC4Header(blob, length);else o.Data = parse_RC4CryptoHeader(blob, length);\n return o;\n }\n\n function parse_FilePass(blob, length, opts) {\n var o = {\n Type: opts.biff >= 8 ? blob.read_shift(2) : 0\n };\n /* wEncryptionType */\n\n if (o.Type) parse_FilePassHeader(blob, length - 2, o);else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n return o;\n }\n\n var RTF = function () {\n function rtf_to_sheet(d, opts) {\n switch (opts.type) {\n case 'base64':\n return rtf_to_sheet_str(Base64.decode(d), opts);\n\n case 'binary':\n return rtf_to_sheet_str(d, opts);\n\n case 'buffer':\n return rtf_to_sheet_str(d.toString('binary'), opts);\n\n case 'array':\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function rtf_to_sheet_str(str, opts) {\n var o = opts || {};\n var ws = o.dense ? [] : {};\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n }; // TODO: parse\n\n if (!str.match(/\\\\trowd/)) throw new Error(\"RTF missing table\");\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function rtf_to_workbook(d, opts) {\n return sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n }\n /* TODO: this is a stub */\n\n\n function sheet_to_rtf(ws) {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n var r = safe_decode_range(ws['!ref']),\n cell;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n o.push(\"\\\\cellx\" + (C + 1));\n }\n\n o.push(\"\\\\pard\\\\intbl\");\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n o.push(\"\\\\cell\");\n }\n\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n\n return o.join(\"\") + \"}\";\n }\n\n return {\n to_workbook: rtf_to_workbook,\n to_sheet: rtf_to_sheet,\n from_sheet: sheet_to_rtf\n };\n }();\n\n function hex2RGB(h) {\n var o = h.slice(h[0] === \"#\" ? 1 : 0).slice(0, 6);\n return [parseInt(o.slice(0, 2), 16), parseInt(o.slice(2, 4), 16), parseInt(o.slice(4, 6), 16)];\n }\n\n function rgb2Hex(rgb) {\n for (var i = 0, o = 1; i != 3; ++i) {\n o = o * 256 + (rgb[i] > 255 ? 255 : rgb[i] < 0 ? 0 : rgb[i]);\n }\n\n return o.toString(16).toUpperCase().slice(1);\n }\n\n function rgb2HSL(rgb) {\n var R = rgb[0] / 255,\n G = rgb[1] / 255,\n B = rgb[2] / 255;\n var M = Math.max(R, G, B),\n m = Math.min(R, G, B),\n C = M - m;\n if (C === 0) return [0, 0, R];\n var H6 = 0,\n S = 0,\n L2 = M + m;\n S = C / (L2 > 1 ? 2 - L2 : L2);\n\n switch (M) {\n case R:\n H6 = ((G - B) / C + 6) % 6;\n break;\n\n case G:\n H6 = (B - R) / C + 2;\n break;\n\n case B:\n H6 = (R - G) / C + 4;\n break;\n }\n\n return [H6 / 6, S, L2 / 2];\n }\n\n function hsl2RGB(hsl) {\n var H = hsl[0],\n S = hsl[1],\n L = hsl[2];\n var C = S * 2 * (L < 0.5 ? L : 1 - L),\n m = L - C / 2;\n var rgb = [m, m, m],\n h6 = 6 * H;\n var X;\n if (S !== 0) switch (h6 | 0) {\n case 0:\n case 6:\n X = C * h6;\n rgb[0] += C;\n rgb[1] += X;\n break;\n\n case 1:\n X = C * (2 - h6);\n rgb[0] += X;\n rgb[1] += C;\n break;\n\n case 2:\n X = C * (h6 - 2);\n rgb[1] += C;\n rgb[2] += X;\n break;\n\n case 3:\n X = C * (4 - h6);\n rgb[1] += X;\n rgb[2] += C;\n break;\n\n case 4:\n X = C * (h6 - 4);\n rgb[2] += C;\n rgb[0] += X;\n break;\n\n case 5:\n X = C * (6 - h6);\n rgb[2] += X;\n rgb[0] += C;\n break;\n }\n\n for (var i = 0; i != 3; ++i) {\n rgb[i] = Math.round(rgb[i] * 255);\n }\n\n return rgb;\n }\n /* 18.8.3 bgColor tint algorithm */\n\n\n function rgb_tint(hex, tint) {\n if (tint === 0) return hex;\n var hsl = rgb2HSL(hex2RGB(hex));\n if (tint < 0) hsl[2] = hsl[2] * (1 + tint);else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n return rgb2Hex(hsl2RGB(hsl));\n }\n /* 18.3.1.13 width calculations */\n\n /* [MS-OI29500] 2.1.595 Column Width & Formatting */\n\n\n var DEF_MDW = 6,\n MAX_MDW = 15,\n MIN_MDW = 1,\n MDW = DEF_MDW;\n\n function width2px(width) {\n return Math.floor((width + Math.round(128 / MDW) / 256) * MDW);\n }\n\n function px2char(px) {\n return Math.floor((px - 5) / MDW * 100 + 0.5) / 100;\n }\n\n function char2width(chr) {\n 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; }\n\n\n function cycle_width(collw) {\n return char2width(px2char(width2px(collw)));\n }\n /* XLSX/XLSB/XLS specify width in units of MDW */\n\n\n function find_mdw_colw(collw) {\n var delta = Math.abs(collw - cycle_width(collw)),\n _MDW = MDW;\n if (delta > 0.005) for (MDW = MIN_MDW; MDW < MAX_MDW; ++MDW) {\n if (Math.abs(collw - cycle_width(collw)) <= delta) {\n delta = Math.abs(collw - cycle_width(collw));\n _MDW = MDW;\n }\n }\n MDW = _MDW;\n }\n /* XLML specifies width in terms of pixels */\n\n /*function find_mdw_wpx(wpx) {\n \tvar delta = Infinity, guess = 0, _MDW = MIN_MDW;\n \tfor(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\n\n function process_col(coll) {\n if (coll.width) {\n coll.wpx = width2px(coll.width);\n coll.wch = px2char(coll.wpx);\n coll.MDW = MDW;\n } else if (coll.wpx) {\n coll.wch = px2char(coll.wpx);\n coll.width = char2width(coll.wch);\n coll.MDW = MDW;\n } else if (typeof coll.wch == 'number') {\n coll.width = char2width(coll.wch);\n coll.wpx = width2px(coll.width);\n coll.MDW = MDW;\n }\n\n if (coll.customWidth) delete coll.customWidth;\n }\n\n var DEF_PPI = 96,\n PPI = DEF_PPI;\n\n function px2pt(px) {\n return px * 96 / PPI;\n }\n\n function pt2px(pt) {\n return pt * PPI / 96;\n }\n /* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\n\n\n var XLMLPatternTypeMap = {\n \"None\": \"none\",\n \"Solid\": \"solid\",\n \"Gray50\": \"mediumGray\",\n \"Gray75\": \"darkGray\",\n \"Gray25\": \"lightGray\",\n \"HorzStripe\": \"darkHorizontal\",\n \"VertStripe\": \"darkVertical\",\n \"ReverseDiagStripe\": \"darkDown\",\n \"DiagStripe\": \"darkUp\",\n \"DiagCross\": \"darkGrid\",\n \"ThickDiagCross\": \"darkTrellis\",\n \"ThinHorzStripe\": \"lightHorizontal\",\n \"ThinVertStripe\": \"lightVertical\",\n \"ThinReverseDiagStripe\": \"lightDown\",\n \"ThinHorzCross\": \"lightGrid\"\n };\n /* 18.8.5 borders CT_Borders */\n\n function parse_borders(t, styles, themes, opts) {\n styles.Borders = [];\n var border = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.4 border CT_Border */\n\n case '':\n case '':\n border = {};\n if (y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n if (y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n styles.Borders.push(border);\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.43 top CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.6 bottom CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.13 diagonal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.25 horizontal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.44 vertical CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.37 start CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.16 end CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n }\n\n }\n });\n }\n /* 18.8.21 fills CT_Fills */\n\n\n function parse_fills(t, styles, themes, opts) {\n styles.Fills = [];\n var fill = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.20 fill CT_Fill */\n\n case '':\n case '':\n fill = {};\n styles.Fills.push(fill);\n break;\n\n case '':\n break;\n\n /* 18.8.24 gradientFill CT_GradientFill */\n\n case '':\n break;\n\n case '':\n styles.Fills.push(fill);\n fill = {};\n break;\n\n /* 18.8.32 patternFill CT_PatternFill */\n\n case '':\n if (y.patternType) fill.patternType = y.patternType;\n break;\n\n case '':\n case '':\n break;\n\n /* 18.8.3 bgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.19 fgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.38 stop CT_GradientStop */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n }\n\n }\n });\n }\n /* 18.8.23 fonts CT_Fonts */\n\n\n function parse_fonts(t, styles, themes, opts) {\n styles.Fonts = [];\n var font = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.22 font CT_Font */\n\n case '':\n break;\n\n case '':\n case '':\n styles.Fonts.push(font);\n font = {};\n break;\n\n /* 18.8.29 name CT_FontName */\n\n case '':\n case '':\n break;\n\n /* 18.8.2 b CT_BooleanProperty */\n\n case '':\n font.bold = 1;\n break;\n\n /* 18.8.26 i CT_BooleanProperty */\n\n case '':\n font.italic = 1;\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n font.underline = 1;\n break;\n\n /* 18.4.10 strike CT_BooleanProperty */\n\n case '':\n font.strike = 1;\n break;\n\n /* 18.4.2 outline CT_BooleanProperty */\n\n case '':\n font.outline = 1;\n break;\n\n /* 18.8.36 shadow CT_BooleanProperty */\n\n case '':\n font.shadow = 1;\n break;\n\n /* 18.8.12 condense CT_BooleanProperty */\n\n case '':\n font.condense = 1;\n break;\n\n /* 18.8.17 extend CT_BooleanProperty */\n\n case '':\n font.extend = 1;\n break;\n\n /* 18.4.11 sz CT_FontSize */\n\n case '':\n case '':\n break;\n\n /* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\n case '':\n case '':\n break;\n\n /* 18.8.18 family CT_FontFamily */\n\n case '':\n case '':\n break;\n\n /* 18.8.35 scheme CT_FontScheme */\n\n case '':\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n }\n\n }\n });\n }\n /* 18.8.31 numFmts CT_NumFmts */\n\n\n function parse_numFmts(t, styles, opts) {\n styles.NumberFmt = [];\n var k\n /*Array*/\n = keys(SSF._table);\n\n for (var i = 0; i < k.length; ++i) {\n styles.NumberFmt[k[i]] = SSF._table[k[i]];\n }\n\n var m = t[0].match(tagregex);\n if (!m) return;\n\n for (i = 0; i < m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n case ' 0) {\n if (j > 0x188) {\n for (j = 0x188; j > 0x3c; --j) {\n if (styles.NumberFmt[j] == null) break;\n }\n\n styles.NumberFmt[j] = f;\n }\n\n SSF.load(f, j);\n }\n }\n break;\n\n case '':\n break;\n\n default:\n if (opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n }\n }\n }\n\n function write_numFmts(NF) {\n var o = [\"\"];\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) o[o.length] = writextag('numFmt', null, {\n numFmtId: i,\n formatCode: escapexml(NF[i])\n });\n }\n });\n if (o.length === 1) return \"\";\n o[o.length] = \"\";\n o[0] = writextag('numFmts', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n }\n /* 18.8.10 cellXfs CT_CellXfs */\n\n\n var cellXF_uint = [\"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\"];\n var cellXF_bool = [\"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\"];\n\n function parse_cellXfs(t, styles, opts) {\n styles.CellXf = [];\n var xf;\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x),\n i = 0;\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n /* 18.8.45 xf CT_Xf */\n\n case '':\n xf = y;\n delete xf[0];\n\n for (i = 0; i < cellXF_uint.length; ++i) {\n if (xf[cellXF_uint[i]]) xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n }\n\n for (i = 0; i < cellXF_bool.length; ++i) {\n if (xf[cellXF_bool[i]]) xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n }\n\n if (xf.numFmtId > 0x188) {\n for (i = 0x188; i > 0x3c; --i) {\n if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) {\n xf.numFmtId = i;\n break;\n }\n }\n }\n\n styles.CellXf.push(xf);\n break;\n\n case '':\n break;\n\n /* 18.8.1 alignment CT_CellAlignment */\n\n case '':\n var alignment = {};\n if (y.vertical) alignment.vertical = y.vertical;\n if (y.horizontal) alignment.horizontal = y.horizontal;\n if (y.textRotation != null) alignment.textRotation = y.textRotation;\n if (y.indent) alignment.indent = y.indent;\n if (y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n xf.alignment = alignment;\n break;\n\n case '':\n break;\n\n /* 18.8.33 protection CT_CellProtection */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n }\n\n }\n });\n }\n\n function write_cellXfs(cellXfs) {\n var o = [];\n o[o.length] = writextag('cellXfs', null);\n cellXfs.forEach(function (c) {\n o[o.length] = writextag('xf', null, c);\n });\n o[o.length] = \"\";\n if (o.length === 2) return \"\";\n o[0] = writextag('cellXfs', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n }\n /* 18.8 Styles CT_Stylesheet*/\n\n\n var parse_sty_xml = function make_pstyx() {\n var numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\n var cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\n var fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\n var fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\n var bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n return function parse_sty_xml(data, themes, opts) {\n var styles = {};\n if (!data) return styles;\n data = data.replace(//mg, \"\").replace(//gm, \"\");\n /* 18.8.39 styleSheet CT_Stylesheet */\n\n var t;\n /* 18.8.31 numFmts CT_NumFmts ? */\n\n if (t = data.match(numFmtRegex)) parse_numFmts(t, styles, opts);\n /* 18.8.23 fonts CT_Fonts ? */\n\n if (t = data.match(fontsRegex)) parse_fonts(t, styles, themes, opts);\n /* 18.8.21 fills CT_Fills ? */\n\n if (t = data.match(fillsRegex)) parse_fills(t, styles, themes, opts);\n /* 18.8.5 borders CT_Borders ? */\n\n if (t = data.match(bordersRegex)) parse_borders(t, styles, themes, opts);\n /* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\n /* 18.8.8 cellStyles CT_CellStyles ? */\n\n /* 18.8.10 cellXfs CT_CellXfs ? */\n\n if (t = data.match(cellXfRegex)) parse_cellXfs(t, styles, opts);\n /* 18.8.15 dxfs CT_Dxfs ? */\n\n /* 18.8.42 tableStyles CT_TableStyles ? */\n\n /* 18.8.11 colors CT_Colors ? */\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n return styles;\n };\n }();\n\n var STYLES_XML_ROOT = writextag('styleSheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:vt': XMLNS.vt\n });\n RELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\n function write_sty_xml(wb, opts) {\n var o = [XML_HEADER, STYLES_XML_ROOT],\n w;\n if (wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n if (w = write_cellXfs(opts.cellXfs)) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.657 BrtFmt */\n\n\n function parse_BrtFmt(data, length) {\n var numFmtId = data.read_shift(2);\n var stFmtCode = parse_XLWideString(data, length - 2);\n return [numFmtId, stFmtCode];\n }\n\n function write_BrtFmt(i, f, o) {\n if (!o) o = new_buf(6 + 4 * f.length);\n o.write_shift(2, i);\n write_XLWideString(f, o);\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (o.l == null) o.l = o.length;\n return out;\n }\n /* [MS-XLSB] 2.4.659 BrtFont TODO */\n\n\n function parse_BrtFont(data, length, opts) {\n var out = {};\n out.sz = data.read_shift(2) / 20;\n var grbit = parse_FontFlags(data, 2, opts);\n if (grbit.fItalic) out.italic = 1;\n if (grbit.fCondense) out.condense = 1;\n if (grbit.fExtend) out.extend = 1;\n if (grbit.fShadow) out.shadow = 1;\n if (grbit.fOutline) out.outline = 1;\n if (grbit.fStrikeout) out.strike = 1;\n var bls = data.read_shift(2);\n if (bls === 0x02BC) out.bold = 1;\n\n switch (data.read_shift(2)) {\n /* case 0: out.vertAlign = \"baseline\"; break; */\n case 1:\n out.vertAlign = \"superscript\";\n break;\n\n case 2:\n out.vertAlign = \"subscript\";\n break;\n }\n\n var underline = data.read_shift(1);\n if (underline != 0) out.underline = underline;\n var family = data.read_shift(1);\n if (family > 0) out.family = family;\n var bCharSet = data.read_shift(1);\n if (bCharSet > 0) out.charset = bCharSet;\n data.l++;\n out.color = parse_BrtColor(data, 8);\n\n switch (data.read_shift(1)) {\n /* case 0: out.scheme = \"none\": break; */\n case 1:\n out.scheme = \"major\";\n break;\n\n case 2:\n out.scheme = \"minor\";\n break;\n }\n\n out.name = parse_XLWideString(data, length - 21);\n return out;\n }\n\n function write_BrtFont(font, o) {\n if (!o) o = new_buf(25 + 4 * 32);\n o.write_shift(2, font.sz * 20);\n write_FontFlags(font, o);\n o.write_shift(2, font.bold ? 0x02BC : 0x0190);\n var sss = 0;\n if (font.vertAlign == \"superscript\") sss = 1;else if (font.vertAlign == \"subscript\") sss = 2;\n o.write_shift(2, sss);\n o.write_shift(1, font.underline || 0);\n o.write_shift(1, font.family || 0);\n o.write_shift(1, font.charset || 0);\n o.write_shift(1, 0);\n write_BrtColor(font.color, o);\n var scheme = 0;\n if (font.scheme == \"major\") scheme = 1;\n if (font.scheme == \"minor\") scheme = 2;\n o.write_shift(1, scheme);\n write_XLWideString(font.name, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.650 BrtFill */\n\n\n var XLSBFillPTNames = [\"none\", \"solid\", \"mediumGray\", \"darkGray\", \"lightGray\", \"darkHorizontal\", \"darkVertical\", \"darkDown\", \"darkUp\", \"darkGrid\", \"darkTrellis\", \"lightHorizontal\", \"lightVertical\", \"lightDown\", \"lightUp\", \"lightGrid\", \"lightTrellis\", \"gray125\", \"gray0625\"];\n var rev_XLSBFillPTNames = evert(XLSBFillPTNames);\n /* TODO: gradient fill representation */\n\n var parse_BrtFill = parsenoop;\n\n function write_BrtFill(fill, o) {\n if (!o) o = new_buf(4 * 3 + 8 * 7 + 16 * 1);\n var fls = rev_XLSBFillPTNames[fill.patternType];\n if (fls == null) fls = 0x28;\n o.write_shift(4, fls);\n var j = 0;\n\n if (fls != 0x28) {\n /* TODO: custom FG Color */\n write_BrtColor({\n auto: 1\n }, o);\n /* TODO: custom BG Color */\n\n write_BrtColor({\n auto: 1\n }, o);\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n } else {\n for (; j < 4; ++j) {\n o.write_shift(4, 0);\n }\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n /* TODO */\n\n /* iGradientType */\n\n /* xnumDegree */\n\n /* xnumFillToLeft */\n\n /* xnumFillToRight */\n\n /* xnumFillToTop */\n\n /* xnumFillToBottom */\n\n /* cNumStop */\n\n /* xfillGradientStop */\n\n }\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.824 BrtXF */\n\n\n function parse_BrtXF(data, length) {\n var tgt = data.l + length;\n var ixfeParent = data.read_shift(2);\n var ifmt = data.read_shift(2);\n data.l = tgt;\n return {\n ixfe: ixfeParent,\n numFmtId: ifmt\n };\n }\n\n function write_BrtXF(data, ixfeP, o) {\n if (!o) o = new_buf(16);\n o.write_shift(2, ixfeP || 0);\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0);\n /* iFont */\n\n o.write_shift(2, 0);\n /* iFill */\n\n o.write_shift(2, 0);\n /* ixBorder */\n\n o.write_shift(1, 0);\n /* trot */\n\n o.write_shift(1, 0);\n /* indent */\n\n var flow = 0;\n o.write_shift(1, flow);\n /* flags */\n\n o.write_shift(1, 0);\n /* flags */\n\n o.write_shift(1, 0);\n /* xfGrbitAtr */\n\n o.write_shift(1, 0);\n return o;\n }\n /* [MS-XLSB] 2.5.4 Blxf TODO */\n\n\n function write_Blxf(data, o) {\n if (!o) o = new_buf(10);\n o.write_shift(1, 0);\n /* dg */\n\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n /* color */\n\n o.write_shift(4, 0);\n /* color */\n\n return o;\n }\n /* [MS-XLSB] 2.4.302 BrtBorder TODO */\n\n\n var parse_BrtBorder = parsenoop;\n\n function write_BrtBorder(border, o) {\n if (!o) o = new_buf(51);\n o.write_shift(1, 0);\n /* diagonal */\n\n write_Blxf(null, o);\n /* top */\n\n write_Blxf(null, o);\n /* bottom */\n\n write_Blxf(null, o);\n /* left */\n\n write_Blxf(null, o);\n /* right */\n\n write_Blxf(null, o);\n /* diag */\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.763 BrtStyle TODO */\n\n\n function write_BrtStyle(style, o) {\n if (!o) o = new_buf(12 + 4 * 10);\n o.write_shift(4, style.xfId);\n o.write_shift(2, 1);\n o.write_shift(1, +style.builtinId);\n o.write_shift(1, 0);\n /* iLevel */\n\n write_XLNullableWideString(style.name || \"\", o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\n\n\n function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n var o = new_buf(4 + 256 * 2 * 4);\n o.write_shift(4, cnt);\n write_XLNullableWideString(defTableStyle, o);\n write_XLNullableWideString(defPivotStyle, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.1.7.50 Styles */\n\n\n function parse_sty_bin(data, themes, opts) {\n var styles = {};\n styles.NumberFmt = [];\n\n for (var y in SSF._table) {\n styles.NumberFmt[y] = SSF._table[y];\n }\n\n styles.CellXf = [];\n styles.Fonts = [];\n var state = [];\n var pass = false;\n recordhopper(data, function hopper_sty(val, R_n, RT) {\n switch (RT) {\n case 0x002C:\n /* 'BrtFmt' */\n styles.NumberFmt[val[0]] = val[1];\n SSF.load(val[1], val[0]);\n break;\n\n case 0x002B:\n /* 'BrtFont' */\n styles.Fonts.push(val);\n\n if (val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n }\n\n break;\n\n case 0x0401:\n /* 'BrtKnownFonts' */\n break;\n\n case 0x002D:\n /* 'BrtFill' */\n break;\n\n case 0x002E:\n /* 'BrtBorder' */\n break;\n\n case 0x002F:\n /* 'BrtXF' */\n if (state[state.length - 1] == \"BrtBeginCellXFs\") {\n styles.CellXf.push(val);\n }\n\n break;\n\n case 0x0030:\n /* 'BrtStyle' */\n\n case 0x01FB:\n /* 'BrtDXF' */\n\n case 0x023C:\n /* 'BrtMRUColor' */\n\n case 0x01DB:\n /* 'BrtIndexedColor': */\n break;\n\n case 0x0493:\n /* 'BrtDXF14' */\n\n case 0x0836:\n /* 'BrtDXF15' */\n\n case 0x046A:\n /* 'BrtSlicerStyleElement' */\n\n case 0x0200:\n /* 'BrtTableStyleElement' */\n\n case 0x082F:\n /* 'BrtTimelineStyleElement' */\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) state.push(R_n);else if ((R_n || \"\").indexOf(\"End\") > 0) state.pop();else if (!pass || opts.WTF && state[state.length - 1] != \"BrtACBegin\") throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n });\n return styles;\n }\n\n function write_FMTS_bin(ba, NF) {\n if (!NF) return;\n var cnt = 0;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) ++cnt;\n }\n });\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n }\n });\n write_record(ba, \"BrtEndFmts\");\n }\n\n function write_FONTS_bin(ba) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n write_record(ba, \"BrtFont\", write_BrtFont({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Calibri\",\n family: 2,\n scheme: \"minor\"\n }));\n /* 1*65491BrtFont [ACFONTS] */\n\n write_record(ba, \"BrtEndFonts\");\n }\n\n function write_FILLS_bin(ba) {\n var cnt = 2;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n write_record(ba, \"BrtFill\", write_BrtFill({\n patternType: \"none\"\n }));\n write_record(ba, \"BrtFill\", write_BrtFill({\n patternType: \"gray125\"\n }));\n /* 1*65431BrtFill */\n\n write_record(ba, \"BrtEndFills\");\n }\n\n function write_BORDERS_bin(ba) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n write_record(ba, \"BrtBorder\", write_BrtBorder({}));\n /* 1*65430BrtBorder */\n\n write_record(ba, \"BrtEndBorders\");\n }\n\n function write_CELLSTYLEXFS_bin(ba) {\n var cnt = 1;\n write_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n write_record(ba, \"BrtXF\", write_BrtXF({\n numFmtId: 0,\n fontId: 0,\n fillId: 0,\n borderId: 0\n }, 0xFFFF));\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, \"BrtEndCellStyleXFs\");\n }\n\n function write_CELLXFS_bin(ba, data) {\n write_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n data.forEach(function (c) {\n write_record(ba, \"BrtXF\", write_BrtXF(c, 0));\n });\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, \"BrtEndCellXFs\");\n }\n\n function write_STYLES_bin(ba) {\n var cnt = 1;\n write_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n write_record(ba, \"BrtStyle\", write_BrtStyle({\n xfId: 0,\n builtinId: 0,\n name: \"Normal\"\n }));\n /* 1*65430(BrtStyle *FRT) */\n\n write_record(ba, \"BrtEndStyles\");\n }\n\n function write_DXFS_bin(ba) {\n var cnt = 0;\n write_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n /* *2147483647(BrtDXF *FRT) */\n\n write_record(ba, \"BrtEndDXFs\");\n }\n\n function write_TABLESTYLES_bin(ba) {\n var cnt = 0;\n write_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n /* *TABLESTYLE */\n\n write_record(ba, \"BrtEndTableStyles\");\n }\n\n function write_COLORPALETTE_bin() {\n return;\n /* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n }\n /* [MS-XLSB] 2.1.7.50 Styles */\n\n\n function write_sty_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginStyleSheet\");\n write_FMTS_bin(ba, wb.SSF);\n write_FONTS_bin(ba, wb);\n write_FILLS_bin(ba, wb);\n write_BORDERS_bin(ba, wb);\n write_CELLSTYLEXFS_bin(ba, wb);\n write_CELLXFS_bin(ba, opts.cellXfs);\n write_STYLES_bin(ba, wb);\n write_DXFS_bin(ba, wb);\n write_TABLESTYLES_bin(ba, wb);\n write_COLORPALETTE_bin(ba, wb);\n /* FRTSTYLESHEET*/\n\n write_record(ba, \"BrtEndStyleSheet\");\n return ba.end();\n }\n\n RELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n /* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\n\n var XLSXThemeClrScheme = ['', '', '', '', '', '', '', '', '', '', '', ''];\n /* 20.1.6.2 clrScheme CT_ColorScheme */\n\n function parse_clrScheme(t, themes, opts) {\n themes.themeElements.clrScheme = [];\n var color = {};\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n /* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n case '':\n break;\n\n /* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n if (y[0].charAt(1) === '/') {\n themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n color = {};\n } else {\n color.name = y[0].slice(3, y[0].length - 1);\n }\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n }\n });\n }\n /* 20.1.4.1.18 fontScheme CT_FontScheme */\n\n\n function parse_fontScheme() {}\n /* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\n\n\n function parse_fmtScheme() {}\n\n var clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\n var fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\n var fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n /* 20.1.6.10 themeElements CT_BaseStyles */\n\n function parse_themeElements(data, themes, opts) {\n themes.themeElements = {};\n var t;\n [\n /* clrScheme CT_ColorScheme */\n ['clrScheme', clrsregex, parse_clrScheme],\n /* fontScheme CT_FontScheme */\n ['fontScheme', fntsregex, parse_fontScheme],\n /* fmtScheme CT_StyleMatrix */\n ['fmtScheme', fmtsregex, parse_fmtScheme]].forEach(function (m) {\n if (!(t = data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n m[2](t, themes, opts);\n });\n }\n\n var themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n /* 14.2.7 Theme Part */\n\n function parse_theme_xml(data, opts) {\n /* 20.1.6.9 theme CT_OfficeStyleSheet */\n if (!data || data.length === 0) return parse_theme_xml(write_theme());\n var t;\n var themes = {};\n /* themeElements CT_BaseStyles */\n\n if (!(t = data.match(themeltregex))) throw new Error('themeElements not found in theme');\n parse_themeElements(t[0], themes, opts);\n themes.raw = data;\n return themes;\n }\n\n function write_theme(Themes, opts) {\n if (opts && opts.themeXLSX) return opts.themeXLSX;\n if (Themes && typeof Themes.raw == \"string\") return Themes.raw;\n var o = [XML_HEADER];\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n return o.join(\"\");\n }\n /* [MS-XLS] 2.4.326 TODO: payload is a zip file */\n\n\n function parse_Theme(blob, length, opts) {\n var end = blob.l + length;\n var dwThemeVersion = blob.read_shift(4);\n if (dwThemeVersion === 124226) return;\n\n if (!opts.cellStyles || !jszip) {\n blob.l = end;\n return;\n }\n\n var data = blob.slice(blob.l);\n blob.l = end;\n var zip;\n\n try {\n zip = new jszip(data);\n } catch (e) {\n return;\n }\n\n var themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n if (!themeXML) return;\n return parse_theme_xml(themeXML, opts);\n }\n /* 2.5.49 */\n\n\n function parse_ColorTheme(blob) {\n return blob.read_shift(4);\n }\n /* 2.5.155 */\n\n\n function parse_FullColorExt(blob) {\n var o = {};\n o.xclrType = blob.read_shift(2);\n o.nTintShade = blob.read_shift(2);\n\n switch (o.xclrType) {\n case 0:\n blob.l += 4;\n break;\n\n case 1:\n o.xclrValue = parse_IcvXF(blob, 4);\n break;\n\n case 2:\n o.xclrValue = parse_LongRGBA(blob, 4);\n break;\n\n case 3:\n o.xclrValue = parse_ColorTheme(blob, 4);\n break;\n\n case 4:\n blob.l += 4;\n break;\n }\n\n blob.l += 8;\n return o;\n }\n /* 2.5.164 TODO: read 7 bits*/\n\n\n function parse_IcvXF(blob, length) {\n return parsenoop(blob, length);\n }\n /* 2.5.280 */\n\n\n function parse_XFExtGradient(blob, length) {\n return parsenoop(blob, length);\n }\n /* [MS-XLS] 2.5.108 */\n\n\n function parse_ExtProp(blob) {\n var extType = blob.read_shift(2);\n var cb = blob.read_shift(2) - 4;\n var o = [extType];\n\n switch (extType) {\n case 0x04:\n case 0x05:\n case 0x07:\n case 0x08:\n case 0x09:\n case 0x0A:\n case 0x0B:\n case 0x0D:\n o[1] = parse_FullColorExt(blob, cb);\n break;\n\n case 0x06:\n o[1] = parse_XFExtGradient(blob, cb);\n break;\n\n case 0x0E:\n case 0x0F:\n o[1] = blob.read_shift(cb === 1 ? 1 : 2);\n break;\n\n default:\n throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n }\n\n return o;\n }\n /* 2.4.355 */\n\n\n function parse_XFExt(blob, length) {\n var end = blob.l + length;\n blob.l += 2;\n var ixfe = blob.read_shift(2);\n blob.l += 2;\n var cexts = blob.read_shift(2);\n var ext = [];\n\n while (cexts-- > 0) {\n ext.push(parse_ExtProp(blob, end - blob.l));\n }\n\n return {\n ixfe: ixfe,\n ext: ext\n };\n }\n /* xf is an XF, see parse_XFExt for xfext */\n\n\n function update_xfext(xf, xfext) {\n xfext.forEach(function (xfe) {\n switch (xfe[0]) {\n /* 2.5.108 extPropData */\n case 0x04:\n break;\n\n /* foreground color */\n\n case 0x05:\n break;\n\n /* background color */\n\n case 0x06:\n break;\n\n /* gradient fill */\n\n case 0x07:\n break;\n\n /* top cell border color */\n\n case 0x08:\n break;\n\n /* bottom cell border color */\n\n case 0x09:\n break;\n\n /* left cell border color */\n\n case 0x0a:\n break;\n\n /* right cell border color */\n\n case 0x0b:\n break;\n\n /* diagonal cell border color */\n\n case 0x0d:\n /* text color */\n break;\n\n case 0x0e:\n break;\n\n /* font scheme */\n\n case 0x0f:\n break;\n\n /* indentation level */\n }\n });\n }\n /* 18.6 Calculation Chain */\n\n\n function parse_cc_xml(data) {\n var d = [];\n if (!data) return d;\n var i = 1;\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n case '':\n break;\n\n /* 18.6.1 c CT_CalcCell 1 */\n\n case ' 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n });\n return out;\n } //function write_cc_bin(data, opts) { }\n\n /* 18.14 Supplementary Workbook Data */\n\n\n function parse_xlink_xml() {//var opts = _opts || {};\n //if(opts.WTF) throw \"XLSX External Link\";\n }\n /* [MS-XLSB] 2.1.7.25 External Link */\n\n\n function parse_xlink_bin(data, rel, name, _opts) {\n if (!data) return data;\n var opts = _opts || {};\n var pass = false,\n end = false;\n recordhopper(data, function xlink_parse(val, R_n, RT) {\n if (end) return;\n\n switch (RT) {\n case 0x0167:\n /* 'BrtSupTabs' */\n\n case 0x016B:\n /* 'BrtExternTableStart' */\n\n case 0x016C:\n /* 'BrtExternTableEnd' */\n\n case 0x016E:\n /* 'BrtExternRowHdr' */\n\n case 0x016F:\n /* 'BrtExternCellBlank' */\n\n case 0x0170:\n /* 'BrtExternCellReal' */\n\n case 0x0171:\n /* 'BrtExternCellBool' */\n\n case 0x0172:\n /* 'BrtExternCellError' */\n\n case 0x0173:\n /* 'BrtExternCellString' */\n\n case 0x01D8:\n /* 'BrtExternValueMeta' */\n\n case 0x0241:\n /* 'BrtSupNameStart' */\n\n case 0x0242:\n /* 'BrtSupNameValueStart' */\n\n case 0x0243:\n /* 'BrtSupNameValueEnd' */\n\n case 0x0244:\n /* 'BrtSupNameNum' */\n\n case 0x0245:\n /* 'BrtSupNameErr' */\n\n case 0x0246:\n /* 'BrtSupNameSt' */\n\n case 0x0247:\n /* 'BrtSupNameNil' */\n\n case 0x0248:\n /* 'BrtSupNameBool' */\n\n case 0x0249:\n /* 'BrtSupNameFmla' */\n\n case 0x024A:\n /* 'BrtSupNameBits' */\n\n case 0x024B:\n /* 'BrtSupNameEnd' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\n }\n }, opts);\n }\n /* 20.5 DrawingML - SpreadsheetML Drawing */\n\n\n RELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\n RELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n /* 20.5.2.35 wsDr CT_Drawing */\n\n function parse_drawing(data, rels) {\n if (!data) return \"??\";\n /*\n Chartsheet Drawing:\n - 20.5.2.35 wsDr CT_Drawing\n - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n - 20.1.2.2.16 graphic CT_GraphicalObject\n - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n the actual type is based on the URI of the graphicData\n \tTODO: handle embedded charts and other types of graphics\n */\n\n var id = (data.match(/]*r:id=\"([^\"]*)\"/) || [\"\", \"\"])[1];\n return rels['!id'][id].Target;\n }\n /* L.5.5.2 SpreadsheetML Comments + VML Schema */\n\n\n var _shapeid = 1024;\n\n function write_comments_vml(rId, comments) {\n var csize = [21600, 21600];\n /* L.5.2.1.2 Path Attribute */\n\n var bbox = [\"m0,0l0\", csize[1], csize[0], csize[1], csize[0], \"0xe\"].join(\",\");\n var o = [writextag(\"xml\", null, {\n 'xmlns:v': XLMLNS.v,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:mv': XLMLNS.mv\n }).replace(/\\/>/, \">\"), writextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {\n 'v:ext': \"edit\",\n 'data': rId\n }), {\n 'v:ext': \"edit\"\n }), writextag(\"v:shapetype\", [writextag(\"v:stroke\", null, {\n joinstyle: \"miter\"\n }), writextag(\"v:path\", null, {\n gradientshapeok: \"t\",\n 'o:connecttype': \"rect\"\n })].join(\"\"), {\n id: \"_x0000_t202\",\n 'o:spt': 202,\n coordsize: csize.join(\",\"),\n path: bbox\n })];\n\n while (_shapeid < rId * 1000) {\n _shapeid += 1000;\n }\n\n comments.forEach(function (x) {\n var c = decode_cell(x[0]);\n var fillopts = {\n 'color2': \"#BEFF82\",\n 'type': \"gradient\"\n };\n if (fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n var fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {\n type: \"gradientUnscaled\",\n 'v:ext': \"view\"\n }) : null;\n var fillxml = writextag('v:fill', fillparm, fillopts);\n var shadata = {\n on: \"t\",\n 'obscured': \"t\"\n };\n ++_shapeid;\n o = o.concat(['', fillxml, writextag(\"v:shadow\", null, shadata), writextag(\"v:path\", null, {\n 'o:connecttype': \"none\"\n }), '', '', '', '',\n /* Part 4 19.4.2.3 Anchor (Anchor) */\n writetag('x:Anchor', [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(\",\")), writetag('x:AutoFill', \"False\"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), x[1].hidden ? '' : '', '', '']);\n });\n o.push('');\n return o.join(\"\");\n }\n\n RELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\n function sheet_insert_comments(sheet, comments) {\n var dense = Array.isArray(sheet);\n var cell;\n comments.forEach(function (comment) {\n var r = decode_cell(comment.ref);\n\n if (dense) {\n if (!sheet[r.r]) sheet[r.r] = [];\n cell = sheet[r.r][r.c];\n } else cell = sheet[comment.ref];\n\n if (!cell) {\n cell = {\n t: \"z\"\n };\n if (dense) sheet[r.r][r.c] = cell;else sheet[comment.ref] = cell;\n var range = safe_decode_range(sheet[\"!ref\"] || \"BDWGO1000001:A1\");\n if (range.s.r > r.r) range.s.r = r.r;\n if (range.e.r < r.r) range.e.r = r.r;\n if (range.s.c > r.c) range.s.c = r.c;\n if (range.e.c < r.c) range.e.c = r.c;\n var encoded = encode_range(range);\n if (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n }\n\n if (!cell.c) cell.c = [];\n var o = {\n a: comment.author,\n t: comment.t,\n r: comment.r\n };\n if (comment.h) o.h = comment.h;\n cell.c.push(o);\n });\n }\n /* 18.7 Comments */\n\n\n function parse_comments_xml(data, opts) {\n /* 18.7.6 CT_Comments */\n if (data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n var authors = [];\n var commentList = [];\n var authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n if (authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n if (a) authors.push(a[1]);\n });\n var cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n if (cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n if (!cm) return;\n var y = parsexmltag(cm[0]);\n var comment = {\n author: y.authorId && authors[y.authorId] || \"sheetjsghost\",\n ref: y.ref,\n guid: y.guid\n };\n var cell = decode_cell(y.ref);\n if (opts.sheetRows && opts.sheetRows <= cell.r) return;\n var textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {\n r: \"\",\n t: \"\",\n h: \"\"\n };\n comment.r = rt.r;\n if (rt.r == \"\") rt.t = rt.h = \"\";\n comment.t = rt.t.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n if (opts.cellHTML) comment.h = rt.h;\n commentList.push(comment);\n });\n return commentList;\n }\n\n var CMNT_XML_ROOT = writextag('comments', null, {\n 'xmlns': XMLNS.main[0]\n });\n\n function write_comments_xml(data) {\n var o = [XML_HEADER, CMNT_XML_ROOT];\n var iauthor = [];\n o.push(\"\");\n data.forEach(function (x) {\n x[1].forEach(function (w) {\n var a = escapexml(w.a);\n if (iauthor.indexOf(a) > -1) return;\n iauthor.push(a);\n o.push(\"\" + a + \"\");\n });\n });\n o.push(\"\");\n o.push(\"\");\n data.forEach(function (d) {\n d[1].forEach(function (c) {\n /* 18.7.3 CT_Comment */\n o.push('');\n o.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n o.push('');\n });\n });\n o.push(\"\");\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.28 BrtBeginComment */\n\n\n function parse_BrtBeginComment(data) {\n var out = {};\n out.iauthor = data.read_shift(4);\n var rfx = parse_UncheckedRfX(data, 16);\n out.rfx = rfx.s;\n out.ref = encode_cell(rfx.s);\n data.l += 16;\n /*var guid = parse_GUID(data); */\n\n return out;\n }\n\n function write_BrtBeginComment(data, o) {\n if (o == null) o = new_buf(36);\n o.write_shift(4, data[1].iauthor);\n write_UncheckedRfX(data[0], o);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n /* [MS-XLSB] 2.4.327 BrtCommentAuthor */\n\n\n var parse_BrtCommentAuthor = parse_XLWideString;\n\n function write_BrtCommentAuthor(data) {\n return write_XLWideString(data.slice(0, 54));\n }\n /* [MS-XLSB] 2.1.7.8 Comments */\n\n\n function parse_comments_bin(data, opts) {\n var out = [];\n var authors = [];\n var c = {};\n var pass = false;\n recordhopper(data, function hopper_cmnt(val, R_n, RT) {\n switch (RT) {\n case 0x0278:\n /* 'BrtCommentAuthor' */\n authors.push(val);\n break;\n\n case 0x027B:\n /* 'BrtBeginComment' */\n c = val;\n break;\n\n case 0x027D:\n /* 'BrtCommentText' */\n c.t = val.t;\n c.h = val.h;\n c.r = val.r;\n break;\n\n case 0x027C:\n /* 'BrtEndComment' */\n c.author = authors[c.iauthor];\n delete c.iauthor;\n if (opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n if (!c.t) c.t = \"\";\n delete c.rfx;\n out.push(c);\n break;\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n });\n return out;\n }\n\n function write_comments_bin(data) {\n var ba = buf_array();\n var iauthor = [];\n write_record(ba, \"BrtBeginComments\");\n write_record(ba, \"BrtBeginCommentAuthors\");\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n if (iauthor.indexOf(c.a) > -1) return;\n iauthor.push(c.a.slice(0, 54));\n write_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n });\n });\n write_record(ba, \"BrtEndCommentAuthors\");\n write_record(ba, \"BrtBeginCommentList\");\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n c.iauthor = iauthor.indexOf(c.a);\n var range = {\n s: decode_cell(comment[0]),\n e: decode_cell(comment[0])\n };\n write_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n if (c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n write_record(ba, \"BrtEndComment\");\n delete c.iauthor;\n });\n });\n write_record(ba, \"BrtEndCommentList\");\n write_record(ba, \"BrtEndComments\");\n return ba.end();\n }\n\n var CT_VBA = \"application/vnd.ms-office.vbaProject\";\n\n function make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n cfb.FullPaths.forEach(function (p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) 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 }\n\n function fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function (p, i) {\n if (i == 0) return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n }\n\n var VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n RELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\n RELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n /* macro and dialog sheet stubs */\n\n function parse_ds_bin() {\n return {\n '!type': 'dialog'\n };\n }\n\n function parse_ds_xml() {\n return {\n '!type': 'dialog'\n };\n }\n\n function parse_ms_bin() {\n return {\n '!type': 'macro'\n };\n }\n\n function parse_ms_xml() {\n return {\n '!type': 'macro'\n };\n }\n /* TODO: it will be useful to parse the function str */\n\n\n var rc_to_a1 = function () {\n var rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n var rcbase = {\n r: 0,\n c: 0\n };\n\n function rcfunc($$, $1, $2, $3) {\n var cRel = false,\n rRel = false;\n if ($2.length == 0) rRel = true;else if ($2.charAt(0) == \"[\") {\n rRel = true;\n $2 = $2.slice(1, -1);\n }\n if ($3.length == 0) cRel = true;else if ($3.charAt(0) == \"[\") {\n cRel = true;\n $3 = $3.slice(1, -1);\n }\n var R = $2.length > 0 ? parseInt($2, 10) | 0 : 0,\n C = $3.length > 0 ? parseInt($3, 10) | 0 : 0;\n if (cRel) C += rcbase.c;else --C;\n if (rRel) R += rcbase.r;else --R;\n return $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n }\n\n return function rc_to_a1(fstr, base) {\n rcbase = base;\n return fstr.replace(rcregex, rcfunc);\n };\n }();\n\n var 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;\n\n var a1_to_rc = function () {\n return function a1_to_rc(fstr, base) {\n return fstr.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n var c = decode_col($3) - ($2 ? 0 : base.c);\n var r = decode_row($5) - ($4 ? 0 : base.r);\n var R = r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : r + 1;\n var C = c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : c + 1;\n return $1 + \"R\" + R + \"C\" + C;\n });\n };\n }();\n /* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\n\n\n function shift_formula_str(f, delta) {\n return f.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n return $1 + ($2 == \"$\" ? $2 + $3 : encode_col(decode_col($3) + delta.c)) + ($4 == \"$\" ? $4 + $5 : encode_row(decode_row($5) + delta.r));\n });\n }\n\n function shift_formula_xlsx(f, range, cell) {\n var r = decode_range(range),\n s = r.s,\n c = decode_cell(cell);\n var delta = {\n r: c.r - s.r,\n c: c.c - s.c\n };\n return shift_formula_str(f, delta);\n }\n /* TODO: parse formula */\n\n\n function fuzzyfmla(f) {\n if (f.length == 1) return false;\n return true;\n }\n\n function _xlfn(f) {\n return f.replace(/_xlfn\\./g, \"\");\n }\n\n function parseread1(blob) {\n blob.l += 1;\n return;\n }\n /* [MS-XLS] 2.5.51 */\n\n\n function parse_ColRelU(blob, length) {\n var c = blob.read_shift(length == 1 ? 1 : 2);\n return [c & 0x3FFF, c >> 14 & 1, c >> 15 & 1];\n }\n /* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\n\n\n function parse_RgceArea(blob, length, opts) {\n var w = 2;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);else if (opts.biff == 12) w = 4;\n }\n\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n }\n /* BIFF 2-5 encodes flags in the row field */\n\n\n function parse_RgceArea_BIFF2(blob) {\n var r = parse_ColRelU(blob, 2),\n R = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n var C = blob.read_shift(1);\n return {\n s: {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n },\n e: {\n r: R[0],\n c: C,\n cRel: R[1],\n rRel: R[2]\n }\n };\n }\n /* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\n\n\n function parse_RgceAreaRel(blob, length, opts) {\n if (opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts.biff == 12 ? 4 : 2),\n R = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n }\n /* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\n\n\n function parse_RgceLoc(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n return {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n };\n }\n\n function parse_RgceLoc_BIFF2(blob) {\n var r = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n return {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n };\n }\n /* [MS-XLS] 2.5.198.107, 2.5.47 */\n\n\n function parse_RgceElfLoc(blob) {\n var r = blob.read_shift(2);\n var c = blob.read_shift(2);\n return {\n r: r,\n c: c & 0xFF,\n fQuoted: !!(c & 0x4000),\n cRel: c >> 15,\n rRel: c >> 15\n };\n }\n /* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\n\n\n function parse_RgceLocRel(blob, length, opts) {\n var biff = opts && opts.biff ? opts.biff : 8;\n if (biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n var r = blob.read_shift(biff >= 12 ? 4 : 2);\n var cl = blob.read_shift(2);\n var cRel = (cl & 0x4000) >> 14,\n rRel = (cl & 0x8000) >> 15;\n cl &= 0x3FFF;\n if (rRel == 1) while (r > 0x7FFFF) {\n r -= 0x100000;\n }\n if (cRel == 1) while (cl > 0x1FFF) {\n cl = cl - 0x4000;\n }\n return {\n r: r,\n c: cl,\n cRel: cRel,\n rRel: rRel\n };\n }\n\n function parse_RgceLocRel_BIFF2(blob) {\n var rl = blob.read_shift(2);\n var c = blob.read_shift(1);\n var rRel = (rl & 0x8000) >> 15,\n cRel = (rl & 0x4000) >> 14;\n rl &= 0x3FFF;\n if (rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n if (cRel == 1 && c >= 0x80) c = c - 0x100;\n return {\n r: rl,\n c: c,\n cRel: cRel,\n rRel: rRel\n };\n }\n /* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\n\n\n function parse_PtgArea(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n return [type, area];\n }\n /* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\n\n\n function parse_PtgArea3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2, 'i');\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n var area = parse_RgceArea(blob, w, opts);\n return [type, ixti, area];\n }\n /* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\n\n\n function parse_PtgAreaErr(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts && opts.biff > 8 ? 12 : opts.biff < 8 ? 6 : 8;\n return [type];\n }\n /* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\n\n\n function parse_PtgAreaErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n blob.l += w;\n return [type, ixti];\n }\n /* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\n\n\n function parse_PtgAreaN(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceAreaRel(blob, length - 1, opts);\n return [type, area];\n }\n /* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\n\n\n function parse_PtgArray(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n return [type];\n }\n /* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\n\n\n function parse_PtgAttrBaxcel(blob) {\n var bitSemi = blob[blob.l + 1] & 0x01;\n /* 1 = volatile */\n\n var bitBaxcel = 1;\n blob.l += 4;\n return [bitSemi, bitBaxcel];\n }\n /* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\n\n\n function parse_PtgAttrChoose(blob, length, opts) {\n blob.l += 2;\n var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var o = [];\n /* offset is 1 less than the number of elements */\n\n for (var i = 0; i <= offset; ++i) {\n o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n }\n\n return o;\n }\n /* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\n\n\n function parse_PtgAttrGoto(blob, length, opts) {\n var bitGoto = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n }\n /* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\n\n\n function parse_PtgAttrIf(blob, length, opts) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n }\n /* [MS-XLSB] 2.5.97.28 */\n\n\n function parse_PtgAttrIfError(blob) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(2)];\n }\n /* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\n\n\n function parse_PtgAttrSemi(blob, length, opts) {\n var bitSemi = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return [bitSemi];\n }\n /* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\n\n\n function parse_PtgAttrSpaceType(blob) {\n var type = blob.read_shift(1),\n cch = blob.read_shift(1);\n return [type, cch];\n }\n /* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\n\n\n function parse_PtgAttrSpace(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n }\n /* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\n\n\n function parse_PtgAttrSpaceSemi(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n }\n /* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\n\n\n function parse_PtgRef(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLoc(blob, 0, opts);\n return [type, loc];\n }\n /* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\n\n\n function parse_PtgRefN(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLocRel(blob, 0, opts);\n return [type, loc];\n }\n /* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\n\n\n function parse_PtgRef3d(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var ixti = blob.read_shift(2); // XtiIndex\n\n if (opts && opts.biff == 5) blob.l += 12;\n var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\n return [type, ixti, loc];\n }\n /* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\n\n\n function parse_PtgFunc(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n return [FtabArgc[iftab], Ftab[iftab], type];\n }\n /* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\n\n\n function parse_PtgFuncVar(blob, length, opts) {\n var type = blob[blob.l++];\n var cparams = blob.read_shift(1),\n tab = opts && opts.biff <= 3 ? [type == 0x58 ? -1 : 0, blob.read_shift(1)] : parsetab(blob);\n return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n }\n\n function parsetab(blob) {\n return [blob[blob.l + 1] >> 7, blob.read_shift(2) & 0x7FFF];\n }\n /* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\n\n\n function parse_PtgAttrSum(blob, length, opts) {\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return;\n }\n /* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\n\n\n function parse_PtgExp(blob, length, opts) {\n blob.l++;\n if (opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n var row = blob.read_shift(2);\n var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [row, col];\n }\n /* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\n\n\n function parse_PtgErr(blob) {\n blob.l++;\n return BErr[blob.read_shift(1)];\n }\n /* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\n\n\n function parse_PtgInt(blob) {\n blob.l++;\n return blob.read_shift(2);\n }\n /* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\n\n\n function parse_PtgBool(blob) {\n blob.l++;\n return blob.read_shift(1) !== 0;\n }\n /* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\n\n\n function parse_PtgNum(blob) {\n blob.l++;\n return parse_Xnum(blob, 8);\n }\n /* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\n\n\n function parse_PtgStr(blob, length, opts) {\n blob.l++;\n 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\n /* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\n\n\n function parse_SerAr(blob, biff) {\n var val = [blob.read_shift(1)];\n if (biff == 12) switch (val[0]) {\n case 0x02:\n val[0] = 0x04;\n break;\n\n /* SerBool */\n\n case 0x04:\n val[0] = 0x10;\n break;\n\n /* SerErr */\n\n case 0x00:\n val[0] = 0x01;\n break;\n\n /* SerNum */\n\n case 0x01:\n val[0] = 0x02;\n break;\n\n /* SerStr */\n }\n\n switch (val[0]) {\n case 0x04:\n /* SerBool -- boolean */\n val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n if (biff != 12) blob.l += 7;\n break;\n\n case 0x25:\n /* appears to be an alias */\n\n case 0x10:\n /* SerErr -- error */\n val[1] = BErr[blob[blob.l]];\n blob.l += biff == 12 ? 4 : 8;\n break;\n\n case 0x00:\n /* SerNil -- honestly, I'm not sure how to reproduce this */\n blob.l += 8;\n break;\n\n case 0x01:\n /* SerNum -- Xnum */\n val[1] = parse_Xnum(blob, 8);\n break;\n\n case 0x02:\n /* SerStr -- XLUnicodeString (<256 chars) */\n val[1] = parse_XLUnicodeString2(blob, 0, {\n biff: biff > 0 && biff < 8 ? 2 : biff\n });\n break;\n\n default:\n throw new Error(\"Bad SerAr: \" + val[0]);\n\n /* Unreachable */\n }\n\n return val;\n }\n /* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\n\n\n function parse_PtgExtraMem(blob, cce, opts) {\n var count = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var out = [];\n\n for (var i = 0; i != count; ++i) {\n out.push((opts.biff == 12 ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n }\n\n return out;\n }\n /* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\n\n\n function parse_PtgExtraArray(blob, length, opts) {\n var rows = 0,\n cols = 0;\n\n if (opts.biff == 12) {\n rows = blob.read_shift(4); // DRw\n\n cols = blob.read_shift(4); // DCol\n } else {\n cols = 1 + blob.read_shift(1); //DColByteU\n\n rows = 1 + blob.read_shift(2); //DRw\n }\n\n if (opts.biff >= 2 && opts.biff < 8) {\n --rows;\n if (--cols == 0) cols = 0x100;\n } // $FlowIgnore\n\n\n for (var i = 0, o = []; i != rows && (o[i] = []); ++i) {\n for (var j = 0; j != cols; ++j) {\n o[i][j] = parse_SerAr(blob, opts.biff);\n }\n }\n\n return o;\n }\n /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\n\n\n function parse_PtgName(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var w = !opts || opts.biff >= 8 ? 4 : 2;\n var nameindex = blob.read_shift(w);\n\n switch (opts.biff) {\n case 2:\n blob.l += 5;\n break;\n\n case 3:\n case 4:\n blob.l += 8;\n break;\n\n case 5:\n blob.l += 12;\n break;\n }\n\n return [type, 0, nameindex];\n }\n /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\n\n\n function parse_PtgNameX(blob, length, opts) {\n if (opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2); // XtiIndex\n\n var nameindex = blob.read_shift(4);\n return [type, ixti, nameindex];\n }\n\n function parse_PtgNameX_BIFF5(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2, 'i'); // XtiIndex\n\n blob.l += 8;\n var nameindex = blob.read_shift(2);\n blob.l += 12;\n return [type, ixti, nameindex];\n }\n /* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\n\n\n function parse_PtgMemArea(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n }\n /* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\n\n\n function parse_PtgMemFunc(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n }\n /* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\n\n\n function parse_PtgRefErr(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += 4;\n if (opts.biff < 8) blob.l--;\n if (opts.biff == 12) blob.l += 2;\n return [type];\n }\n /* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\n\n\n function parse_PtgRefErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 4;\n if (opts) switch (opts.biff) {\n case 5:\n w = 15;\n break;\n\n case 12:\n w = 6;\n break;\n }\n blob.l += w;\n return [type, ixti];\n }\n /* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\n\n\n var parse_PtgMemErr = parsenoop;\n /* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\n\n var parse_PtgMemNoMem = parsenoop;\n /* [MS-XLS] 2.5.198.92 */\n\n var parse_PtgTbl = parsenoop;\n\n function parse_PtgElfLoc(blob, length, opts) {\n blob.l += 2;\n return [parse_RgceElfLoc(blob, 4, opts)];\n }\n\n function parse_PtgElfNoop(blob) {\n blob.l += 6;\n return [];\n }\n /* [MS-XLS] 2.5.198.46 */\n\n\n var parse_PtgElfCol = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.47 */\n\n var parse_PtgElfColS = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.48 */\n\n var parse_PtgElfColSV = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.49 */\n\n var parse_PtgElfColV = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.50 */\n\n function parse_PtgElfLel(blob) {\n blob.l += 2;\n return [parseuint16(blob), blob.read_shift(2) & 0x01];\n }\n /* [MS-XLS] 2.5.198.51 */\n\n\n var parse_PtgElfRadical = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.52 */\n\n var parse_PtgElfRadicalLel = parse_PtgElfLel;\n /* [MS-XLS] 2.5.198.53 */\n\n var parse_PtgElfRadicalS = parse_PtgElfNoop;\n /* [MS-XLS] 2.5.198.54 */\n\n var parse_PtgElfRw = parse_PtgElfLoc;\n /* [MS-XLS] 2.5.198.55 */\n\n var parse_PtgElfRwV = parse_PtgElfLoc;\n /* [MS-XLSB] 2.5.97.52 TODO */\n\n var PtgListRT = [\"Data\", \"All\", \"Headers\", \"??\", \"?Data2\", \"??\", \"?DataHeaders\", \"??\", \"Totals\", \"??\", \"??\", \"??\", \"?DataTotals\", \"??\", \"??\", \"??\", \"?Current\"];\n\n function parse_PtgList(blob) {\n blob.l += 2;\n var ixti = blob.read_shift(2);\n var flags = blob.read_shift(2);\n var idx = blob.read_shift(4);\n var c = blob.read_shift(2);\n var C = blob.read_shift(2);\n var rt = PtgListRT[flags >> 2 & 0x1F];\n return {\n ixti: ixti,\n coltype: flags & 0x3,\n rt: rt,\n idx: idx,\n c: c,\n C: C\n };\n }\n /* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\n\n\n function parse_PtgSxName(blob) {\n blob.l += 2;\n return [blob.read_shift(4)];\n }\n /* [XLS] old spec */\n\n\n function parse_PtgSheet(blob, length, opts) {\n blob.l += 5;\n blob.l += 2;\n blob.l += opts.biff == 2 ? 1 : 4;\n return [\"PTGSHEET\"];\n }\n\n function parse_PtgEndSheet(blob, length, opts) {\n blob.l += opts.biff == 2 ? 4 : 5;\n return [\"PTGENDSHEET\"];\n }\n\n function parse_PtgMemAreaN(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n }\n\n function parse_PtgMemNoMemN(blob) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n }\n\n function parse_PtgAttrNoop(blob) {\n blob.l += 4;\n return [0, 0];\n }\n /* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\n\n\n var PtgTypes = {\n 0x01: {\n n: 'PtgExp',\n f: parse_PtgExp\n },\n 0x02: {\n n: 'PtgTbl',\n f: parse_PtgTbl\n },\n 0x03: {\n n: 'PtgAdd',\n f: parseread1\n },\n 0x04: {\n n: 'PtgSub',\n f: parseread1\n },\n 0x05: {\n n: 'PtgMul',\n f: parseread1\n },\n 0x06: {\n n: 'PtgDiv',\n f: parseread1\n },\n 0x07: {\n n: 'PtgPower',\n f: parseread1\n },\n 0x08: {\n n: 'PtgConcat',\n f: parseread1\n },\n 0x09: {\n n: 'PtgLt',\n f: parseread1\n },\n 0x0A: {\n n: 'PtgLe',\n f: parseread1\n },\n 0x0B: {\n n: 'PtgEq',\n f: parseread1\n },\n 0x0C: {\n n: 'PtgGe',\n f: parseread1\n },\n 0x0D: {\n n: 'PtgGt',\n f: parseread1\n },\n 0x0E: {\n n: 'PtgNe',\n f: parseread1\n },\n 0x0F: {\n n: 'PtgIsect',\n f: parseread1\n },\n 0x10: {\n n: 'PtgUnion',\n f: parseread1\n },\n 0x11: {\n n: 'PtgRange',\n f: parseread1\n },\n 0x12: {\n n: 'PtgUplus',\n f: parseread1\n },\n 0x13: {\n n: 'PtgUminus',\n f: parseread1\n },\n 0x14: {\n n: 'PtgPercent',\n f: parseread1\n },\n 0x15: {\n n: 'PtgParen',\n f: parseread1\n },\n 0x16: {\n n: 'PtgMissArg',\n f: parseread1\n },\n 0x17: {\n n: 'PtgStr',\n f: parse_PtgStr\n },\n 0x1A: {\n n: 'PtgSheet',\n f: parse_PtgSheet\n },\n 0x1B: {\n n: 'PtgEndSheet',\n f: parse_PtgEndSheet\n },\n 0x1C: {\n n: 'PtgErr',\n f: parse_PtgErr\n },\n 0x1D: {\n n: 'PtgBool',\n f: parse_PtgBool\n },\n 0x1E: {\n n: 'PtgInt',\n f: parse_PtgInt\n },\n 0x1F: {\n n: 'PtgNum',\n f: parse_PtgNum\n },\n 0x20: {\n n: 'PtgArray',\n f: parse_PtgArray\n },\n 0x21: {\n n: 'PtgFunc',\n f: parse_PtgFunc\n },\n 0x22: {\n n: 'PtgFuncVar',\n f: parse_PtgFuncVar\n },\n 0x23: {\n n: 'PtgName',\n f: parse_PtgName\n },\n 0x24: {\n n: 'PtgRef',\n f: parse_PtgRef\n },\n 0x25: {\n n: 'PtgArea',\n f: parse_PtgArea\n },\n 0x26: {\n n: 'PtgMemArea',\n f: parse_PtgMemArea\n },\n 0x27: {\n n: 'PtgMemErr',\n f: parse_PtgMemErr\n },\n 0x28: {\n n: 'PtgMemNoMem',\n f: parse_PtgMemNoMem\n },\n 0x29: {\n n: 'PtgMemFunc',\n f: parse_PtgMemFunc\n },\n 0x2A: {\n n: 'PtgRefErr',\n f: parse_PtgRefErr\n },\n 0x2B: {\n n: 'PtgAreaErr',\n f: parse_PtgAreaErr\n },\n 0x2C: {\n n: 'PtgRefN',\n f: parse_PtgRefN\n },\n 0x2D: {\n n: 'PtgAreaN',\n f: parse_PtgAreaN\n },\n 0x2E: {\n n: 'PtgMemAreaN',\n f: parse_PtgMemAreaN\n },\n 0x2F: {\n n: 'PtgMemNoMemN',\n f: parse_PtgMemNoMemN\n },\n 0x39: {\n n: 'PtgNameX',\n f: parse_PtgNameX\n },\n 0x3A: {\n n: 'PtgRef3d',\n f: parse_PtgRef3d\n },\n 0x3B: {\n n: 'PtgArea3d',\n f: parse_PtgArea3d\n },\n 0x3C: {\n n: 'PtgRefErr3d',\n f: parse_PtgRefErr3d\n },\n 0x3D: {\n n: 'PtgAreaErr3d',\n f: parse_PtgAreaErr3d\n },\n 0xFF: {}\n };\n /* These are duplicated in the PtgTypes table */\n\n var PtgDupes = {\n 0x40: 0x20,\n 0x60: 0x20,\n 0x41: 0x21,\n 0x61: 0x21,\n 0x42: 0x22,\n 0x62: 0x22,\n 0x43: 0x23,\n 0x63: 0x23,\n 0x44: 0x24,\n 0x64: 0x24,\n 0x45: 0x25,\n 0x65: 0x25,\n 0x46: 0x26,\n 0x66: 0x26,\n 0x47: 0x27,\n 0x67: 0x27,\n 0x48: 0x28,\n 0x68: 0x28,\n 0x49: 0x29,\n 0x69: 0x29,\n 0x4A: 0x2A,\n 0x6A: 0x2A,\n 0x4B: 0x2B,\n 0x6B: 0x2B,\n 0x4C: 0x2C,\n 0x6C: 0x2C,\n 0x4D: 0x2D,\n 0x6D: 0x2D,\n 0x4E: 0x2E,\n 0x6E: 0x2E,\n 0x4F: 0x2F,\n 0x6F: 0x2F,\n 0x58: 0x22,\n 0x78: 0x22,\n 0x59: 0x39,\n 0x79: 0x39,\n 0x5A: 0x3A,\n 0x7A: 0x3A,\n 0x5B: 0x3B,\n 0x7B: 0x3B,\n 0x5C: 0x3C,\n 0x7C: 0x3C,\n 0x5D: 0x3D,\n 0x7D: 0x3D\n };\n\n (function () {\n for (var y in PtgDupes) {\n PtgTypes[y] = PtgTypes[PtgDupes[y]];\n }\n })();\n\n var Ptg18 = {\n 0x01: {\n n: 'PtgElfLel',\n f: parse_PtgElfLel\n },\n 0x02: {\n n: 'PtgElfRw',\n f: parse_PtgElfRw\n },\n 0x03: {\n n: 'PtgElfCol',\n f: parse_PtgElfCol\n },\n 0x06: {\n n: 'PtgElfRwV',\n f: parse_PtgElfRwV\n },\n 0x07: {\n n: 'PtgElfColV',\n f: parse_PtgElfColV\n },\n 0x0A: {\n n: 'PtgElfRadical',\n f: parse_PtgElfRadical\n },\n 0x0B: {\n n: 'PtgElfRadicalS',\n f: parse_PtgElfRadicalS\n },\n 0x0D: {\n n: 'PtgElfColS',\n f: parse_PtgElfColS\n },\n 0x0F: {\n n: 'PtgElfColSV',\n f: parse_PtgElfColSV\n },\n 0x10: {\n n: 'PtgElfRadicalLel',\n f: parse_PtgElfRadicalLel\n },\n 0x19: {\n n: 'PtgList',\n f: parse_PtgList\n },\n 0x1D: {\n n: 'PtgSxName',\n f: parse_PtgSxName\n },\n 0xFF: {}\n };\n var Ptg19 = {\n 0x00: {\n n: 'PtgAttrNoop',\n f: parse_PtgAttrNoop\n },\n 0x01: {\n n: 'PtgAttrSemi',\n f: parse_PtgAttrSemi\n },\n 0x02: {\n n: 'PtgAttrIf',\n f: parse_PtgAttrIf\n },\n 0x04: {\n n: 'PtgAttrChoose',\n f: parse_PtgAttrChoose\n },\n 0x08: {\n n: 'PtgAttrGoto',\n f: parse_PtgAttrGoto\n },\n 0x10: {\n n: 'PtgAttrSum',\n f: parse_PtgAttrSum\n },\n 0x20: {\n n: 'PtgAttrBaxcel',\n f: parse_PtgAttrBaxcel\n },\n 0x40: {\n n: 'PtgAttrSpace',\n f: parse_PtgAttrSpace\n },\n 0x41: {\n n: 'PtgAttrSpaceSemi',\n f: parse_PtgAttrSpaceSemi\n },\n 0x80: {\n n: 'PtgAttrIfError',\n f: parse_PtgAttrIfError\n },\n 0xFF: {}\n };\n Ptg19[0x21] = Ptg19[0x20];\n /* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\n\n function parse_RgbExtra(blob, length, rgce, opts) {\n if (opts.biff < 8) return parsenoop(blob, length);\n var target = blob.l + length;\n var o = [];\n\n for (var i = 0; i !== rgce.length; ++i) {\n switch (rgce[i][0]) {\n case 'PtgArray':\n /* PtgArray -> PtgExtraArray */\n rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n o.push(rgce[i][1]);\n break;\n\n case 'PtgMemArea':\n /* PtgMemArea -> PtgExtraMem */\n rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n o.push(rgce[i][2]);\n break;\n\n case 'PtgExp':\n /* PtgExp -> PtgExtraCol */\n if (opts && opts.biff == 12) {\n rgce[i][1][1] = blob.read_shift(4);\n o.push(rgce[i][1]);\n }\n\n break;\n\n case 'PtgList':\n /* TODO: PtgList -> PtgExtraList */\n\n case 'PtgElfRadicalS':\n /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\n case 'PtgElfColS':\n /* TODO: PtgElfColS -> PtgExtraElf */\n\n case 'PtgElfColSV':\n /* TODO: PtgElfColSV -> PtgExtraElf */\n throw \"Unsupported \" + rgce[i][0];\n\n default:\n break;\n }\n }\n\n length = target - blob.l;\n /* note: this is technically an error but Excel disregards */\n //if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\n if (length !== 0) o.push(parsenoop(blob, length));\n return o;\n }\n /* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\n\n\n function parse_Rgce(blob, length, opts) {\n var target = blob.l + length;\n var R,\n id,\n ptgs = [];\n\n while (target != blob.l) {\n length = target - blob.l;\n id = blob[blob.l];\n R = PtgTypes[id];\n if (id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\n if (!R || !R.f) {\n /*ptgs.push*/\n parsenoop(blob, length);\n } else {\n ptgs.push([R.n, R.f(blob, length, opts)]);\n }\n }\n\n return ptgs;\n }\n\n function stringify_array(f) {\n var o = [];\n\n for (var i = 0; i < f.length; ++i) {\n var x = f[i],\n r = [];\n\n for (var j = 0; j < x.length; ++j) {\n var y = x[j];\n if (y) switch (y[0]) {\n // TODO: handle embedded quotes\n case 0x02:\n r.push('\"' + y[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n default:\n r.push(y[1]);\n } else r.push(\"\");\n }\n\n o.push(r.join(\",\"));\n }\n\n return o.join(\";\");\n }\n /* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\n\n\n var PtgBinOp = {\n PtgAdd: \"+\",\n PtgConcat: \"&\",\n PtgDiv: \"/\",\n PtgEq: \"=\",\n PtgGe: \">=\",\n PtgGt: \">\",\n PtgLe: \"<=\",\n PtgLt: \"<\",\n PtgMul: \"*\",\n PtgNe: \"<>\",\n PtgPower: \"^\",\n PtgSub: \"-\"\n }; // List of invalid characters needs to be tested further\n\n var quoteCharacters = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\n\n function formula_quote_sheet_name(sname, opts) {\n if (!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n if (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n return sname;\n }\n\n function get_ixti_raw(supbooks, ixti, opts) {\n if (!supbooks) return \"SH33TJSERR0\";\n if (opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n if (!supbooks.XTI) return \"SH33TJSERR6\";\n var XTI = supbooks.XTI[ixti];\n\n if (opts.biff < 8) {\n if (ixti > 10000) ixti -= 65536;\n if (ixti < 0) ixti = -ixti;\n return ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n }\n\n if (!XTI) return \"SH33TJSERR1\";\n var o = \"\";\n if (opts.biff > 8) switch (supbooks[XTI[0]][0]) {\n case 0x0165:\n /* 'BrtSupSelf' */\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x0166:\n /* 'BrtSupSame' */\n if (opts.SID != null) return supbooks.SheetNames[opts.SID];\n return \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n /* falls through */\n\n default:\n return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n }\n\n switch (supbooks[XTI[0]][0][0]) {\n case 0x0401:\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x3A01:\n return supbooks[XTI[0]].slice(1).map(function (name) {\n return name.Name;\n }).join(\";;\");\n //return \"SH33TJSERR8\";\n\n default:\n if (!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n o = XTI[1] == -1 ? \"#REF\" : supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n }\n }\n\n function get_ixti(supbooks, ixti, opts) {\n return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);\n }\n\n function stringify_formula(formula\n /*Array*/\n , range, cell, supbooks, opts) {\n var biff = opts && opts.biff || 8;\n var _range =\n /*range != null ? range :*/\n {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var stack = [],\n e1,\n e2,\n c,\n ixti = 0,\n nameidx = 0,\n r,\n sname = \"\";\n if (!formula[0] || !formula[0][0]) return \"\";\n var last_sp = -1,\n sp = \"\";\n\n for (var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n var f = formula[0][ff];\n\n switch (f[0]) {\n case 'PtgUminus':\n /* [MS-XLS] 2.5.198.93 */\n stack.push(\"-\" + stack.pop());\n break;\n\n case 'PtgUplus':\n /* [MS-XLS] 2.5.198.95 */\n stack.push(\"+\" + stack.pop());\n break;\n\n case 'PtgPercent':\n /* [MS-XLS] 2.5.198.81 */\n stack.push(stack.pop() + \"%\");\n break;\n\n case 'PtgAdd':\n /* [MS-XLS] 2.5.198.26 */\n\n case 'PtgConcat':\n /* [MS-XLS] 2.5.198.43 */\n\n case 'PtgDiv':\n /* [MS-XLS] 2.5.198.45 */\n\n case 'PtgEq':\n /* [MS-XLS] 2.5.198.56 */\n\n case 'PtgGe':\n /* [MS-XLS] 2.5.198.64 */\n\n case 'PtgGt':\n /* [MS-XLS] 2.5.198.65 */\n\n case 'PtgLe':\n /* [MS-XLS] 2.5.198.68 */\n\n case 'PtgLt':\n /* [MS-XLS] 2.5.198.69 */\n\n case 'PtgMul':\n /* [MS-XLS] 2.5.198.75 */\n\n case 'PtgNe':\n /* [MS-XLS] 2.5.198.78 */\n\n case 'PtgPower':\n /* [MS-XLS] 2.5.198.82 */\n\n case 'PtgSub':\n /* [MS-XLS] 2.5.198.90 */\n e1 = stack.pop();\n e2 = stack.pop();\n\n if (last_sp >= 0) {\n switch (formula[0][last_sp][1][0]) {\n case 0:\n // $FlowIgnore\n sp = fill(\" \", formula[0][last_sp][1][1]);\n break;\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", formula[0][last_sp][1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n e2 = e2 + sp;\n last_sp = -1;\n }\n\n stack.push(e2 + PtgBinOp[f[0]] + e1);\n break;\n\n case 'PtgIsect':\n /* [MS-XLS] 2.5.198.67 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \" \" + e1);\n break;\n\n case 'PtgUnion':\n /* [MS-XLS] 2.5.198.94 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \",\" + e1);\n break;\n\n case 'PtgRange':\n /* [MS-XLS] 2.5.198.83 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \":\" + e1);\n break;\n\n case 'PtgAttrChoose':\n /* [MS-XLS] 2.5.198.34 */\n break;\n\n case 'PtgAttrGoto':\n /* [MS-XLS] 2.5.198.35 */\n break;\n\n case 'PtgAttrIf':\n /* [MS-XLS] 2.5.198.36 */\n break;\n\n case 'PtgAttrIfError':\n /* [MS-XLSB] 2.5.97.28 */\n break;\n\n case 'PtgRef':\n /* [MS-XLS] 2.5.198.84 */\n c = shift_cell_xls(f[1][1], _range, opts);\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRefN':\n /* [MS-XLS] 2.5.198.88 */\n c = cell ? shift_cell_xls(f[1][1], cell, opts) : f[1][1];\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRef3d':\n /* [MS-XLS] 2.5.198.85 */\n ixti = f[1][1];\n c = shift_cell_xls(f[1][2], _range, opts);\n sname = get_ixti(supbooks, ixti, opts);\n var w = sname;\n /* IE9 fails on defined names */\n // eslint-disable-line no-unused-vars\n\n stack.push(sname + \"!\" + encode_cell_xls(c, biff));\n break;\n\n case 'PtgFunc':\n /* [MS-XLS] 2.5.198.62 */\n\n case 'PtgFuncVar':\n /* [MS-XLS] 2.5.198.63 */\n\n /* f[1] = [argc, func, type] */\n var argc = f[1][0],\n func = f[1][1];\n if (!argc) argc = 0;\n argc &= 0x7F;\n var args = argc == 0 ? [] : stack.slice(-argc);\n stack.length -= argc;\n if (func === 'User') func = args.shift();\n stack.push(func + \"(\" + args.join(\",\") + \")\");\n break;\n\n case 'PtgBool':\n /* [MS-XLS] 2.5.198.42 */\n stack.push(f[1] ? \"TRUE\" : \"FALSE\");\n break;\n\n case 'PtgInt':\n /* [MS-XLS] 2.5.198.66 */\n stack.push(f[1]);\n break;\n\n case 'PtgNum':\n /* [MS-XLS] 2.5.198.79 TODO: precision? */\n stack.push(String(f[1]));\n break;\n\n case 'PtgStr':\n /* [MS-XLS] 2.5.198.89 */\n // $FlowIgnore\n stack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n case 'PtgErr':\n /* [MS-XLS] 2.5.198.57 */\n stack.push(f[1]);\n break;\n\n case 'PtgAreaN':\n /* [MS-XLS] 2.5.198.31 TODO */\n r = shift_range_xls(f[1][1], cell ? {\n s: cell\n } : _range, opts);\n stack.push(encode_range_xls(r, opts));\n break;\n\n case 'PtgArea':\n /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n r = shift_range_xls(f[1][1], _range, opts);\n stack.push(encode_range_xls(r, opts));\n break;\n\n case 'PtgArea3d':\n /* [MS-XLS] 2.5.198.28 TODO */\n ixti = f[1][1];\n r = f[1][2];\n sname = get_ixti(supbooks, ixti, opts);\n stack.push(sname + \"!\" + encode_range_xls(r, opts));\n break;\n\n case 'PtgAttrSum':\n /* [MS-XLS] 2.5.198.41 */\n stack.push(\"SUM(\" + stack.pop() + \")\");\n break;\n\n case 'PtgAttrBaxcel':\n /* [MS-XLS] 2.5.198.33 */\n\n case 'PtgAttrSemi':\n /* [MS-XLS] 2.5.198.37 */\n break;\n\n case 'PtgName':\n /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\n /* f[1] = type, 0, nameindex */\n nameidx = f[1][2];\n var lbl = (supbooks.names || [])[nameidx - 1] || (supbooks[0] || [])[nameidx];\n var name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n if (name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n stack.push(name);\n break;\n\n case 'PtgNameX':\n /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\n /* f[1] = type, ixti, nameindex */\n var bookidx = f[1][1];\n nameidx = f[1][2];\n var externbook;\n /* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\n if (opts.biff <= 5) {\n if (bookidx < 0) bookidx = -bookidx;\n if (supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n } else {\n var o = \"\";\n\n if (((supbooks[bookidx] || [])[0] || [])[0] == 0x3A01) {\n /* empty */\n } else if (((supbooks[bookidx] || [])[0] || [])[0] == 0x0401) {\n if (supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab - 1] + \"!\";\n }\n } else o = supbooks.SheetNames[nameidx - 1] + \"!\";\n\n if (supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;else if (supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;else {\n var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(\";;\");\n if (ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n else o += \"SH33TJSERRX\";\n }\n stack.push(o);\n break;\n }\n\n if (!externbook) externbook = {\n Name: \"SH33TJSERRY\"\n };\n stack.push(externbook.Name);\n break;\n\n case 'PtgParen':\n /* [MS-XLS] 2.5.198.80 */\n var lp = '(',\n rp = ')';\n\n if (last_sp >= 0) {\n sp = \"\";\n\n switch (formula[0][last_sp][1][0]) {\n // $FlowIgnore\n case 2:\n lp = fill(\" \", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 3:\n lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 4:\n rp = fill(\" \", formula[0][last_sp][1][1]) + rp;\n break;\n // $FlowIgnore\n\n case 5:\n rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp;\n break;\n\n default:\n // $FlowIgnore\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n last_sp = -1;\n }\n\n stack.push(lp + stack.pop() + rp);\n break;\n\n case 'PtgRefErr':\n /* [MS-XLS] 2.5.198.86 */\n stack.push('#REF!');\n break;\n\n case 'PtgRefErr3d':\n /* [MS-XLS] 2.5.198.87 */\n stack.push('#REF!');\n break;\n\n case 'PtgExp':\n /* [MS-XLS] 2.5.198.58 TODO */\n c = {\n c: f[1][1],\n r: f[1][0]\n };\n var q = {\n c: cell.c,\n r: cell.r\n };\n\n if (supbooks.sharedf[encode_cell(c)]) {\n var parsedf = supbooks.sharedf[encode_cell(c)];\n stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n } else {\n var fnd = false;\n\n for (e1 = 0; e1 != supbooks.arrayf.length; ++e1) {\n /* TODO: should be something like range_has */\n e2 = supbooks.arrayf[e1];\n if (c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n if (c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n fnd = true;\n break;\n }\n\n if (!fnd) stack.push(f[1]);\n }\n\n break;\n\n case 'PtgArray':\n /* [MS-XLS] 2.5.198.32 TODO */\n stack.push(\"{\" + stringify_array(f[1]) + \"}\");\n break;\n\n case 'PtgMemArea':\n /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n //stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n break;\n\n case 'PtgAttrSpace':\n /* [MS-XLS] 2.5.198.38 */\n\n case 'PtgAttrSpaceSemi':\n /* [MS-XLS] 2.5.198.39 */\n last_sp = ff;\n break;\n\n case 'PtgTbl':\n /* [MS-XLS] 2.5.198.92 TODO */\n break;\n\n case 'PtgMemErr':\n /* [MS-XLS] 2.5.198.71 */\n break;\n\n case 'PtgMissArg':\n /* [MS-XLS] 2.5.198.74 */\n stack.push(\"\");\n break;\n\n case 'PtgAreaErr':\n /* [MS-XLS] 2.5.198.29 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgAreaErr3d':\n /* [MS-XLS] 2.5.198.30 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgList':\n /* [MS-XLSB] 2.5.97.52 */\n // $FlowIgnore\n stack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n break;\n\n case 'PtgMemAreaN':\n case 'PtgMemNoMemN':\n case 'PtgAttrNoop':\n case 'PtgSheet':\n case 'PtgEndSheet':\n break;\n\n case 'PtgMemFunc':\n /* [MS-XLS] 2.5.198.72 TODO */\n break;\n\n case 'PtgMemNoMem':\n /* [MS-XLS] 2.5.198.73 TODO */\n break;\n\n case 'PtgElfCol':\n /* [MS-XLS] 2.5.198.46 */\n\n case 'PtgElfColS':\n /* [MS-XLS] 2.5.198.47 */\n\n case 'PtgElfColSV':\n /* [MS-XLS] 2.5.198.48 */\n\n case 'PtgElfColV':\n /* [MS-XLS] 2.5.198.49 */\n\n case 'PtgElfLel':\n /* [MS-XLS] 2.5.198.50 */\n\n case 'PtgElfRadical':\n /* [MS-XLS] 2.5.198.51 */\n\n case 'PtgElfRadicalLel':\n /* [MS-XLS] 2.5.198.52 */\n\n case 'PtgElfRadicalS':\n /* [MS-XLS] 2.5.198.53 */\n\n case 'PtgElfRw':\n /* [MS-XLS] 2.5.198.54 */\n\n case 'PtgElfRwV':\n /* [MS-XLS] 2.5.198.55 */\n throw new Error(\"Unsupported ELFs\");\n\n case 'PtgSxName':\n /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n throw new Error('Unrecognized Formula Token: ' + String(f));\n\n default:\n throw new Error('Unrecognized Formula Token: ' + String(f));\n }\n\n var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n if (opts.biff != 3) if (last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n f = formula[0][last_sp];\n var _left = true;\n\n switch (f[1][0]) {\n /* note: some bad XLSB files omit the PtgParen */\n case 4:\n _left = false;\n\n /* falls through */\n\n case 0:\n // $FlowIgnore\n sp = fill(\" \", f[1][1]);\n break;\n\n case 5:\n _left = false;\n\n /* falls through */\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", f[1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n }\n\n stack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n last_sp = -1;\n }\n }\n\n if (stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n return stack[0];\n }\n /* [MS-XLS] 2.5.198.1 TODO */\n\n\n function parse_ArrayParsedFormula(blob, length, opts) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.3 TODO */\n\n\n function parse_XLSCellParsedFormula(blob, length, opts) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.21 */\n\n\n function parse_NameParsedFormula(blob, length, opts, cce) {\n var target = blob.l + length;\n var rgce = parse_Rgce(blob, cce, opts);\n var rgcb;\n if (target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.198.118 TODO */\n\n\n function parse_SharedParsedFormula(blob, length, opts) {\n var target = blob.l + length;\n var rgcb,\n cce = blob.read_shift(2); // length of rgce\n\n var rgce = parse_Rgce(blob, cce, opts);\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n if (length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n return [rgce, rgcb];\n }\n /* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\n\n\n function parse_FormulaValue(blob) {\n var b;\n if (__readUInt16LE(blob, blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob), 'n'];\n\n switch (blob[blob.l]) {\n case 0x00:\n blob.l += 8;\n return [\"String\", 's'];\n\n case 0x01:\n b = blob[blob.l + 2] === 0x1;\n blob.l += 8;\n return [b, 'b'];\n\n case 0x02:\n b = blob[blob.l + 2];\n blob.l += 8;\n return [b, 'e'];\n\n case 0x03:\n blob.l += 8;\n return [\"\", 's'];\n }\n\n return [];\n }\n\n function write_FormulaValue(value) {\n if (value == null) {\n // Blank String Value\n var o = new_buf(8);\n o.write_shift(1, 0x03);\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0xFFFF);\n return o;\n } else if (typeof value == \"number\") return write_Xnum(value);\n\n return write_Xnum(0);\n }\n /* [MS-XLS] 2.4.127 TODO */\n\n\n function parse_Formula(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) ++blob.l;\n var val = parse_FormulaValue(blob, 8);\n var flags = blob.read_shift(1);\n\n if (opts.biff != 2) {\n blob.read_shift(1);\n\n if (opts.biff >= 5) {\n /*var chn = */\n blob.read_shift(4);\n }\n }\n\n var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n return {\n cell: cell,\n val: val[0],\n formula: cbf,\n shared: flags >> 3 & 1,\n tt: val[1]\n };\n }\n\n function write_Formula(cell, R, C, opts, os) {\n // Cell\n var o1 = write_XLSCell(R, C, os); // FormulaValue\n\n var o2 = write_FormulaValue(cell.v); // flags + cache\n\n var o3 = new_buf(6);\n var flags = 0x01 | 0x20;\n o3.write_shift(2, flags);\n o3.write_shift(4, 0); // CellParsedFormula\n\n var bf = new_buf(cell.bf.length);\n\n for (var i = 0; i < cell.bf.length; ++i) {\n bf[i] = cell.bf[i];\n }\n\n var out = bconcat([o1, o2, o3, bf]);\n return out;\n }\n /* XLSB Parsed Formula records have the same shape */\n\n\n function parse_XLSBParsedFormula(data, length, opts) {\n var cce = data.read_shift(4);\n var rgce = parse_Rgce(data, cce, opts);\n var cb = data.read_shift(4);\n var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n return [rgce, rgcb];\n }\n /* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\n\n\n var parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.4 CellParsedFormula */\n\n var parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n //var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n\n /* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n //var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n\n /* [MS-XLSB] 2.5.97.12 NameParsedFormula */\n\n var parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\n\n var parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n /* [MS-XLS] 2.5.198.4 */\n\n var Cetab = {\n 0x0000: 'BEEP',\n 0x0001: 'OPEN',\n 0x0002: 'OPEN.LINKS',\n 0x0003: 'CLOSE.ALL',\n 0x0004: 'SAVE',\n 0x0005: 'SAVE.AS',\n 0x0006: 'FILE.DELETE',\n 0x0007: 'PAGE.SETUP',\n 0x0008: 'PRINT',\n 0x0009: 'PRINTER.SETUP',\n 0x000A: 'QUIT',\n 0x000B: 'NEW.WINDOW',\n 0x000C: 'ARRANGE.ALL',\n 0x000D: 'WINDOW.SIZE',\n 0x000E: 'WINDOW.MOVE',\n 0x000F: 'FULL',\n 0x0010: 'CLOSE',\n 0x0011: 'RUN',\n 0x0016: 'SET.PRINT.AREA',\n 0x0017: 'SET.PRINT.TITLES',\n 0x0018: 'SET.PAGE.BREAK',\n 0x0019: 'REMOVE.PAGE.BREAK',\n 0x001A: 'FONT',\n 0x001B: 'DISPLAY',\n 0x001C: 'PROTECT.DOCUMENT',\n 0x001D: 'PRECISION',\n 0x001E: 'A1.R1C1',\n 0x001F: 'CALCULATE.NOW',\n 0x0020: 'CALCULATION',\n 0x0022: 'DATA.FIND',\n 0x0023: 'EXTRACT',\n 0x0024: 'DATA.DELETE',\n 0x0025: 'SET.DATABASE',\n 0x0026: 'SET.CRITERIA',\n 0x0027: 'SORT',\n 0x0028: 'DATA.SERIES',\n 0x0029: 'TABLE',\n 0x002A: 'FORMAT.NUMBER',\n 0x002B: 'ALIGNMENT',\n 0x002C: 'STYLE',\n 0x002D: 'BORDER',\n 0x002E: 'CELL.PROTECTION',\n 0x002F: 'COLUMN.WIDTH',\n 0x0030: 'UNDO',\n 0x0031: 'CUT',\n 0x0032: 'COPY',\n 0x0033: 'PASTE',\n 0x0034: 'CLEAR',\n 0x0035: 'PASTE.SPECIAL',\n 0x0036: 'EDIT.DELETE',\n 0x0037: 'INSERT',\n 0x0038: 'FILL.RIGHT',\n 0x0039: 'FILL.DOWN',\n 0x003D: 'DEFINE.NAME',\n 0x003E: 'CREATE.NAMES',\n 0x003F: 'FORMULA.GOTO',\n 0x0040: 'FORMULA.FIND',\n 0x0041: 'SELECT.LAST.CELL',\n 0x0042: 'SHOW.ACTIVE.CELL',\n 0x0043: 'GALLERY.AREA',\n 0x0044: 'GALLERY.BAR',\n 0x0045: 'GALLERY.COLUMN',\n 0x0046: 'GALLERY.LINE',\n 0x0047: 'GALLERY.PIE',\n 0x0048: 'GALLERY.SCATTER',\n 0x0049: 'COMBINATION',\n 0x004A: 'PREFERRED',\n 0x004B: 'ADD.OVERLAY',\n 0x004C: 'GRIDLINES',\n 0x004D: 'SET.PREFERRED',\n 0x004E: 'AXES',\n 0x004F: 'LEGEND',\n 0x0050: 'ATTACH.TEXT',\n 0x0051: 'ADD.ARROW',\n 0x0052: 'SELECT.CHART',\n 0x0053: 'SELECT.PLOT.AREA',\n 0x0054: 'PATTERNS',\n 0x0055: 'MAIN.CHART',\n 0x0056: 'OVERLAY',\n 0x0057: 'SCALE',\n 0x0058: 'FORMAT.LEGEND',\n 0x0059: 'FORMAT.TEXT',\n 0x005A: 'EDIT.REPEAT',\n 0x005B: 'PARSE',\n 0x005C: 'JUSTIFY',\n 0x005D: 'HIDE',\n 0x005E: 'UNHIDE',\n 0x005F: 'WORKSPACE',\n 0x0060: 'FORMULA',\n 0x0061: 'FORMULA.FILL',\n 0x0062: 'FORMULA.ARRAY',\n 0x0063: 'DATA.FIND.NEXT',\n 0x0064: 'DATA.FIND.PREV',\n 0x0065: 'FORMULA.FIND.NEXT',\n 0x0066: 'FORMULA.FIND.PREV',\n 0x0067: 'ACTIVATE',\n 0x0068: 'ACTIVATE.NEXT',\n 0x0069: 'ACTIVATE.PREV',\n 0x006A: 'UNLOCKED.NEXT',\n 0x006B: 'UNLOCKED.PREV',\n 0x006C: 'COPY.PICTURE',\n 0x006D: 'SELECT',\n 0x006E: 'DELETE.NAME',\n 0x006F: 'DELETE.FORMAT',\n 0x0070: 'VLINE',\n 0x0071: 'HLINE',\n 0x0072: 'VPAGE',\n 0x0073: 'HPAGE',\n 0x0074: 'VSCROLL',\n 0x0075: 'HSCROLL',\n 0x0076: 'ALERT',\n 0x0077: 'NEW',\n 0x0078: 'CANCEL.COPY',\n 0x0079: 'SHOW.CLIPBOARD',\n 0x007A: 'MESSAGE',\n 0x007C: 'PASTE.LINK',\n 0x007D: 'APP.ACTIVATE',\n 0x007E: 'DELETE.ARROW',\n 0x007F: 'ROW.HEIGHT',\n 0x0080: 'FORMAT.MOVE',\n 0x0081: 'FORMAT.SIZE',\n 0x0082: 'FORMULA.REPLACE',\n 0x0083: 'SEND.KEYS',\n 0x0084: 'SELECT.SPECIAL',\n 0x0085: 'APPLY.NAMES',\n 0x0086: 'REPLACE.FONT',\n 0x0087: 'FREEZE.PANES',\n 0x0088: 'SHOW.INFO',\n 0x0089: 'SPLIT',\n 0x008A: 'ON.WINDOW',\n 0x008B: 'ON.DATA',\n 0x008C: 'DISABLE.INPUT',\n 0x008E: 'OUTLINE',\n 0x008F: 'LIST.NAMES',\n 0x0090: 'FILE.CLOSE',\n 0x0091: 'SAVE.WORKBOOK',\n 0x0092: 'DATA.FORM',\n 0x0093: 'COPY.CHART',\n 0x0094: 'ON.TIME',\n 0x0095: 'WAIT',\n 0x0096: 'FORMAT.FONT',\n 0x0097: 'FILL.UP',\n 0x0098: 'FILL.LEFT',\n 0x0099: 'DELETE.OVERLAY',\n 0x009B: 'SHORT.MENUS',\n 0x009F: 'SET.UPDATE.STATUS',\n 0x00A1: 'COLOR.PALETTE',\n 0x00A2: 'DELETE.STYLE',\n 0x00A3: 'WINDOW.RESTORE',\n 0x00A4: 'WINDOW.MAXIMIZE',\n 0x00A6: 'CHANGE.LINK',\n 0x00A7: 'CALCULATE.DOCUMENT',\n 0x00A8: 'ON.KEY',\n 0x00A9: 'APP.RESTORE',\n 0x00AA: 'APP.MOVE',\n 0x00AB: 'APP.SIZE',\n 0x00AC: 'APP.MINIMIZE',\n 0x00AD: 'APP.MAXIMIZE',\n 0x00AE: 'BRING.TO.FRONT',\n 0x00AF: 'SEND.TO.BACK',\n 0x00B9: 'MAIN.CHART.TYPE',\n 0x00BA: 'OVERLAY.CHART.TYPE',\n 0x00BB: 'SELECT.END',\n 0x00BC: 'OPEN.MAIL',\n 0x00BD: 'SEND.MAIL',\n 0x00BE: 'STANDARD.FONT',\n 0x00BF: 'CONSOLIDATE',\n 0x00C0: 'SORT.SPECIAL',\n 0x00C1: 'GALLERY.3D.AREA',\n 0x00C2: 'GALLERY.3D.COLUMN',\n 0x00C3: 'GALLERY.3D.LINE',\n 0x00C4: 'GALLERY.3D.PIE',\n 0x00C5: 'VIEW.3D',\n 0x00C6: 'GOAL.SEEK',\n 0x00C7: 'WORKGROUP',\n 0x00C8: 'FILL.GROUP',\n 0x00C9: 'UPDATE.LINK',\n 0x00CA: 'PROMOTE',\n 0x00CB: 'DEMOTE',\n 0x00CC: 'SHOW.DETAIL',\n 0x00CE: 'UNGROUP',\n 0x00CF: 'OBJECT.PROPERTIES',\n 0x00D0: 'SAVE.NEW.OBJECT',\n 0x00D1: 'SHARE',\n 0x00D2: 'SHARE.NAME',\n 0x00D3: 'DUPLICATE',\n 0x00D4: 'APPLY.STYLE',\n 0x00D5: 'ASSIGN.TO.OBJECT',\n 0x00D6: 'OBJECT.PROTECTION',\n 0x00D7: 'HIDE.OBJECT',\n 0x00D8: 'SET.EXTRACT',\n 0x00D9: 'CREATE.PUBLISHER',\n 0x00DA: 'SUBSCRIBE.TO',\n 0x00DB: 'ATTRIBUTES',\n 0x00DC: 'SHOW.TOOLBAR',\n 0x00DE: 'PRINT.PREVIEW',\n 0x00DF: 'EDIT.COLOR',\n 0x00E0: 'SHOW.LEVELS',\n 0x00E1: 'FORMAT.MAIN',\n 0x00E2: 'FORMAT.OVERLAY',\n 0x00E3: 'ON.RECALC',\n 0x00E4: 'EDIT.SERIES',\n 0x00E5: 'DEFINE.STYLE',\n 0x00F0: 'LINE.PRINT',\n 0x00F3: 'ENTER.DATA',\n 0x00F9: 'GALLERY.RADAR',\n 0x00FA: 'MERGE.STYLES',\n 0x00FB: 'EDITION.OPTIONS',\n 0x00FC: 'PASTE.PICTURE',\n 0x00FD: 'PASTE.PICTURE.LINK',\n 0x00FE: 'SPELLING',\n 0x0100: 'ZOOM',\n 0x0103: 'INSERT.OBJECT',\n 0x0104: 'WINDOW.MINIMIZE',\n 0x0109: 'SOUND.NOTE',\n 0x010A: 'SOUND.PLAY',\n 0x010B: 'FORMAT.SHAPE',\n 0x010C: 'EXTEND.POLYGON',\n 0x010D: 'FORMAT.AUTO',\n 0x0110: 'GALLERY.3D.BAR',\n 0x0111: 'GALLERY.3D.SURFACE',\n 0x0112: 'FILL.AUTO',\n 0x0114: 'CUSTOMIZE.TOOLBAR',\n 0x0115: 'ADD.TOOL',\n 0x0116: 'EDIT.OBJECT',\n 0x0117: 'ON.DOUBLECLICK',\n 0x0118: 'ON.ENTRY',\n 0x0119: 'WORKBOOK.ADD',\n 0x011A: 'WORKBOOK.MOVE',\n 0x011B: 'WORKBOOK.COPY',\n 0x011C: 'WORKBOOK.OPTIONS',\n 0x011D: 'SAVE.WORKSPACE',\n 0x0120: 'CHART.WIZARD',\n 0x0121: 'DELETE.TOOL',\n 0x0122: 'MOVE.TOOL',\n 0x0123: 'WORKBOOK.SELECT',\n 0x0124: 'WORKBOOK.ACTIVATE',\n 0x0125: 'ASSIGN.TO.TOOL',\n 0x0127: 'COPY.TOOL',\n 0x0128: 'RESET.TOOL',\n 0x0129: 'CONSTRAIN.NUMERIC',\n 0x012A: 'PASTE.TOOL',\n 0x012E: 'WORKBOOK.NEW',\n 0x0131: 'SCENARIO.CELLS',\n 0x0132: 'SCENARIO.DELETE',\n 0x0133: 'SCENARIO.ADD',\n 0x0134: 'SCENARIO.EDIT',\n 0x0135: 'SCENARIO.SHOW',\n 0x0136: 'SCENARIO.SHOW.NEXT',\n 0x0137: 'SCENARIO.SUMMARY',\n 0x0138: 'PIVOT.TABLE.WIZARD',\n 0x0139: 'PIVOT.FIELD.PROPERTIES',\n 0x013A: 'PIVOT.FIELD',\n 0x013B: 'PIVOT.ITEM',\n 0x013C: 'PIVOT.ADD.FIELDS',\n 0x013E: 'OPTIONS.CALCULATION',\n 0x013F: 'OPTIONS.EDIT',\n 0x0140: 'OPTIONS.VIEW',\n 0x0141: 'ADDIN.MANAGER',\n 0x0142: 'MENU.EDITOR',\n 0x0143: 'ATTACH.TOOLBARS',\n 0x0144: 'VBAActivate',\n 0x0145: 'OPTIONS.CHART',\n 0x0148: 'VBA.INSERT.FILE',\n 0x014A: 'VBA.PROCEDURE.DEFINITION',\n 0x0150: 'ROUTING.SLIP',\n 0x0152: 'ROUTE.DOCUMENT',\n 0x0153: 'MAIL.LOGON',\n 0x0156: 'INSERT.PICTURE',\n 0x0157: 'EDIT.TOOL',\n 0x0158: 'GALLERY.DOUGHNUT',\n 0x015E: 'CHART.TREND',\n 0x0160: 'PIVOT.ITEM.PROPERTIES',\n 0x0162: 'WORKBOOK.INSERT',\n 0x0163: 'OPTIONS.TRANSITION',\n 0x0164: 'OPTIONS.GENERAL',\n 0x0172: 'FILTER.ADVANCED',\n 0x0175: 'MAIL.ADD.MAILER',\n 0x0176: 'MAIL.DELETE.MAILER',\n 0x0177: 'MAIL.REPLY',\n 0x0178: 'MAIL.REPLY.ALL',\n 0x0179: 'MAIL.FORWARD',\n 0x017A: 'MAIL.NEXT.LETTER',\n 0x017B: 'DATA.LABEL',\n 0x017C: 'INSERT.TITLE',\n 0x017D: 'FONT.PROPERTIES',\n 0x017E: 'MACRO.OPTIONS',\n 0x017F: 'WORKBOOK.HIDE',\n 0x0180: 'WORKBOOK.UNHIDE',\n 0x0181: 'WORKBOOK.DELETE',\n 0x0182: 'WORKBOOK.NAME',\n 0x0184: 'GALLERY.CUSTOM',\n 0x0186: 'ADD.CHART.AUTOFORMAT',\n 0x0187: 'DELETE.CHART.AUTOFORMAT',\n 0x0188: 'CHART.ADD.DATA',\n 0x0189: 'AUTO.OUTLINE',\n 0x018A: 'TAB.ORDER',\n 0x018B: 'SHOW.DIALOG',\n 0x018C: 'SELECT.ALL',\n 0x018D: 'UNGROUP.SHEETS',\n 0x018E: 'SUBTOTAL.CREATE',\n 0x018F: 'SUBTOTAL.REMOVE',\n 0x0190: 'RENAME.OBJECT',\n 0x019C: 'WORKBOOK.SCROLL',\n 0x019D: 'WORKBOOK.NEXT',\n 0x019E: 'WORKBOOK.PREV',\n 0x019F: 'WORKBOOK.TAB.SPLIT',\n 0x01A0: 'FULL.SCREEN',\n 0x01A1: 'WORKBOOK.PROTECT',\n 0x01A4: 'SCROLLBAR.PROPERTIES',\n 0x01A5: 'PIVOT.SHOW.PAGES',\n 0x01A6: 'TEXT.TO.COLUMNS',\n 0x01A7: 'FORMAT.CHARTTYPE',\n 0x01A8: 'LINK.FORMAT',\n 0x01A9: 'TRACER.DISPLAY',\n 0x01AE: 'TRACER.NAVIGATE',\n 0x01AF: 'TRACER.CLEAR',\n 0x01B0: 'TRACER.ERROR',\n 0x01B1: 'PIVOT.FIELD.GROUP',\n 0x01B2: 'PIVOT.FIELD.UNGROUP',\n 0x01B3: 'CHECKBOX.PROPERTIES',\n 0x01B4: 'LABEL.PROPERTIES',\n 0x01B5: 'LISTBOX.PROPERTIES',\n 0x01B6: 'EDITBOX.PROPERTIES',\n 0x01B7: 'PIVOT.REFRESH',\n 0x01B8: 'LINK.COMBO',\n 0x01B9: 'OPEN.TEXT',\n 0x01BA: 'HIDE.DIALOG',\n 0x01BB: 'SET.DIALOG.FOCUS',\n 0x01BC: 'ENABLE.OBJECT',\n 0x01BD: 'PUSHBUTTON.PROPERTIES',\n 0x01BE: 'SET.DIALOG.DEFAULT',\n 0x01BF: 'FILTER',\n 0x01C0: 'FILTER.SHOW.ALL',\n 0x01C1: 'CLEAR.OUTLINE',\n 0x01C2: 'FUNCTION.WIZARD',\n 0x01C3: 'ADD.LIST.ITEM',\n 0x01C4: 'SET.LIST.ITEM',\n 0x01C5: 'REMOVE.LIST.ITEM',\n 0x01C6: 'SELECT.LIST.ITEM',\n 0x01C7: 'SET.CONTROL.VALUE',\n 0x01C8: 'SAVE.COPY.AS',\n 0x01CA: 'OPTIONS.LISTS.ADD',\n 0x01CB: 'OPTIONS.LISTS.DELETE',\n 0x01CC: 'SERIES.AXES',\n 0x01CD: 'SERIES.X',\n 0x01CE: 'SERIES.Y',\n 0x01CF: 'ERRORBAR.X',\n 0x01D0: 'ERRORBAR.Y',\n 0x01D1: 'FORMAT.CHART',\n 0x01D2: 'SERIES.ORDER',\n 0x01D3: 'MAIL.LOGOFF',\n 0x01D4: 'CLEAR.ROUTING.SLIP',\n 0x01D5: 'APP.ACTIVATE.MICROSOFT',\n 0x01D6: 'MAIL.EDIT.MAILER',\n 0x01D7: 'ON.SHEET',\n 0x01D8: 'STANDARD.WIDTH',\n 0x01D9: 'SCENARIO.MERGE',\n 0x01DA: 'SUMMARY.INFO',\n 0x01DB: 'FIND.FILE',\n 0x01DC: 'ACTIVE.CELL.FONT',\n 0x01DD: 'ENABLE.TIPWIZARD',\n 0x01DE: 'VBA.MAKE.ADDIN',\n 0x01E0: 'INSERTDATATABLE',\n 0x01E1: 'WORKGROUP.OPTIONS',\n 0x01E2: 'MAIL.SEND.MAILER',\n 0x01E5: 'AUTOCORRECT',\n 0x01E9: 'POST.DOCUMENT',\n 0x01EB: 'PICKLIST',\n 0x01ED: 'VIEW.SHOW',\n 0x01EE: 'VIEW.DEFINE',\n 0x01EF: 'VIEW.DELETE',\n 0x01FD: 'SHEET.BACKGROUND',\n 0x01FE: 'INSERT.MAP.OBJECT',\n 0x01FF: 'OPTIONS.MENONO',\n 0x0205: 'MSOCHECKS',\n 0x0206: 'NORMAL',\n 0x0207: 'LAYOUT',\n 0x0208: 'RM.PRINT.AREA',\n 0x0209: 'CLEAR.PRINT.AREA',\n 0x020A: 'ADD.PRINT.AREA',\n 0x020B: 'MOVE.BRK',\n 0x0221: 'HIDECURR.NOTE',\n 0x0222: 'HIDEALL.NOTES',\n 0x0223: 'DELETE.NOTE',\n 0x0224: 'TRAVERSE.NOTES',\n 0x0225: 'ACTIVATE.NOTES',\n 0x026C: 'PROTECT.REVISIONS',\n 0x026D: 'UNPROTECT.REVISIONS',\n 0x0287: 'OPTIONS.ME',\n 0x028D: 'WEB.PUBLISH',\n 0x029B: 'NEWWEBQUERY',\n 0x02A1: 'PIVOT.TABLE.CHART',\n 0x02F1: 'OPTIONS.SAVE',\n 0x02F3: 'OPTIONS.SPELL',\n 0x0328: 'HIDEALL.INKANNOTS'\n };\n /* [MS-XLS] 2.5.198.17 */\n\n /* [MS-XLSB] 2.5.97.10 */\n\n var Ftab = {\n 0x0000: 'COUNT',\n 0x0001: 'IF',\n 0x0002: 'ISNA',\n 0x0003: 'ISERROR',\n 0x0004: 'SUM',\n 0x0005: 'AVERAGE',\n 0x0006: 'MIN',\n 0x0007: 'MAX',\n 0x0008: 'ROW',\n 0x0009: 'COLUMN',\n 0x000A: 'NA',\n 0x000B: 'NPV',\n 0x000C: 'STDEV',\n 0x000D: 'DOLLAR',\n 0x000E: 'FIXED',\n 0x000F: 'SIN',\n 0x0010: 'COS',\n 0x0011: 'TAN',\n 0x0012: 'ATAN',\n 0x0013: 'PI',\n 0x0014: 'SQRT',\n 0x0015: 'EXP',\n 0x0016: 'LN',\n 0x0017: 'LOG10',\n 0x0018: 'ABS',\n 0x0019: 'INT',\n 0x001A: 'SIGN',\n 0x001B: 'ROUND',\n 0x001C: 'LOOKUP',\n 0x001D: 'INDEX',\n 0x001E: 'REPT',\n 0x001F: 'MID',\n 0x0020: 'LEN',\n 0x0021: 'VALUE',\n 0x0022: 'TRUE',\n 0x0023: 'FALSE',\n 0x0024: 'AND',\n 0x0025: 'OR',\n 0x0026: 'NOT',\n 0x0027: 'MOD',\n 0x0028: 'DCOUNT',\n 0x0029: 'DSUM',\n 0x002A: 'DAVERAGE',\n 0x002B: 'DMIN',\n 0x002C: 'DMAX',\n 0x002D: 'DSTDEV',\n 0x002E: 'VAR',\n 0x002F: 'DVAR',\n 0x0030: 'TEXT',\n 0x0031: 'LINEST',\n 0x0032: 'TREND',\n 0x0033: 'LOGEST',\n 0x0034: 'GROWTH',\n 0x0035: 'GOTO',\n 0x0036: 'HALT',\n 0x0037: 'RETURN',\n 0x0038: 'PV',\n 0x0039: 'FV',\n 0x003A: 'NPER',\n 0x003B: 'PMT',\n 0x003C: 'RATE',\n 0x003D: 'MIRR',\n 0x003E: 'IRR',\n 0x003F: 'RAND',\n 0x0040: 'MATCH',\n 0x0041: 'DATE',\n 0x0042: 'TIME',\n 0x0043: 'DAY',\n 0x0044: 'MONTH',\n 0x0045: 'YEAR',\n 0x0046: 'WEEKDAY',\n 0x0047: 'HOUR',\n 0x0048: 'MINUTE',\n 0x0049: 'SECOND',\n 0x004A: 'NOW',\n 0x004B: 'AREAS',\n 0x004C: 'ROWS',\n 0x004D: 'COLUMNS',\n 0x004E: 'OFFSET',\n 0x004F: 'ABSREF',\n 0x0050: 'RELREF',\n 0x0051: 'ARGUMENT',\n 0x0052: 'SEARCH',\n 0x0053: 'TRANSPOSE',\n 0x0054: 'ERROR',\n 0x0055: 'STEP',\n 0x0056: 'TYPE',\n 0x0057: 'ECHO',\n 0x0058: 'SET.NAME',\n 0x0059: 'CALLER',\n 0x005A: 'DEREF',\n 0x005B: 'WINDOWS',\n 0x005C: 'SERIES',\n 0x005D: 'DOCUMENTS',\n 0x005E: 'ACTIVE.CELL',\n 0x005F: 'SELECTION',\n 0x0060: 'RESULT',\n 0x0061: 'ATAN2',\n 0x0062: 'ASIN',\n 0x0063: 'ACOS',\n 0x0064: 'CHOOSE',\n 0x0065: 'HLOOKUP',\n 0x0066: 'VLOOKUP',\n 0x0067: 'LINKS',\n 0x0068: 'INPUT',\n 0x0069: 'ISREF',\n 0x006A: 'GET.FORMULA',\n 0x006B: 'GET.NAME',\n 0x006C: 'SET.VALUE',\n 0x006D: 'LOG',\n 0x006E: 'EXEC',\n 0x006F: 'CHAR',\n 0x0070: 'LOWER',\n 0x0071: 'UPPER',\n 0x0072: 'PROPER',\n 0x0073: 'LEFT',\n 0x0074: 'RIGHT',\n 0x0075: 'EXACT',\n 0x0076: 'TRIM',\n 0x0077: 'REPLACE',\n 0x0078: 'SUBSTITUTE',\n 0x0079: 'CODE',\n 0x007A: 'NAMES',\n 0x007B: 'DIRECTORY',\n 0x007C: 'FIND',\n 0x007D: 'CELL',\n 0x007E: 'ISERR',\n 0x007F: 'ISTEXT',\n 0x0080: 'ISNUMBER',\n 0x0081: 'ISBLANK',\n 0x0082: 'T',\n 0x0083: 'N',\n 0x0084: 'FOPEN',\n 0x0085: 'FCLOSE',\n 0x0086: 'FSIZE',\n 0x0087: 'FREADLN',\n 0x0088: 'FREAD',\n 0x0089: 'FWRITELN',\n 0x008A: 'FWRITE',\n 0x008B: 'FPOS',\n 0x008C: 'DATEVALUE',\n 0x008D: 'TIMEVALUE',\n 0x008E: 'SLN',\n 0x008F: 'SYD',\n 0x0090: 'DDB',\n 0x0091: 'GET.DEF',\n 0x0092: 'REFTEXT',\n 0x0093: 'TEXTREF',\n 0x0094: 'INDIRECT',\n 0x0095: 'REGISTER',\n 0x0096: 'CALL',\n 0x0097: 'ADD.BAR',\n 0x0098: 'ADD.MENU',\n 0x0099: 'ADD.COMMAND',\n 0x009A: 'ENABLE.COMMAND',\n 0x009B: 'CHECK.COMMAND',\n 0x009C: 'RENAME.COMMAND',\n 0x009D: 'SHOW.BAR',\n 0x009E: 'DELETE.MENU',\n 0x009F: 'DELETE.COMMAND',\n 0x00A0: 'GET.CHART.ITEM',\n 0x00A1: 'DIALOG.BOX',\n 0x00A2: 'CLEAN',\n 0x00A3: 'MDETERM',\n 0x00A4: 'MINVERSE',\n 0x00A5: 'MMULT',\n 0x00A6: 'FILES',\n 0x00A7: 'IPMT',\n 0x00A8: 'PPMT',\n 0x00A9: 'COUNTA',\n 0x00AA: 'CANCEL.KEY',\n 0x00AB: 'FOR',\n 0x00AC: 'WHILE',\n 0x00AD: 'BREAK',\n 0x00AE: 'NEXT',\n 0x00AF: 'INITIATE',\n 0x00B0: 'REQUEST',\n 0x00B1: 'POKE',\n 0x00B2: 'EXECUTE',\n 0x00B3: 'TERMINATE',\n 0x00B4: 'RESTART',\n 0x00B5: 'HELP',\n 0x00B6: 'GET.BAR',\n 0x00B7: 'PRODUCT',\n 0x00B8: 'FACT',\n 0x00B9: 'GET.CELL',\n 0x00BA: 'GET.WORKSPACE',\n 0x00BB: 'GET.WINDOW',\n 0x00BC: 'GET.DOCUMENT',\n 0x00BD: 'DPRODUCT',\n 0x00BE: 'ISNONTEXT',\n 0x00BF: 'GET.NOTE',\n 0x00C0: 'NOTE',\n 0x00C1: 'STDEVP',\n 0x00C2: 'VARP',\n 0x00C3: 'DSTDEVP',\n 0x00C4: 'DVARP',\n 0x00C5: 'TRUNC',\n 0x00C6: 'ISLOGICAL',\n 0x00C7: 'DCOUNTA',\n 0x00C8: 'DELETE.BAR',\n 0x00C9: 'UNREGISTER',\n 0x00CC: 'USDOLLAR',\n 0x00CD: 'FINDB',\n 0x00CE: 'SEARCHB',\n 0x00CF: 'REPLACEB',\n 0x00D0: 'LEFTB',\n 0x00D1: 'RIGHTB',\n 0x00D2: 'MIDB',\n 0x00D3: 'LENB',\n 0x00D4: 'ROUNDUP',\n 0x00D5: 'ROUNDDOWN',\n 0x00D6: 'ASC',\n 0x00D7: 'DBCS',\n 0x00D8: 'RANK',\n 0x00DB: 'ADDRESS',\n 0x00DC: 'DAYS360',\n 0x00DD: 'TODAY',\n 0x00DE: 'VDB',\n 0x00DF: 'ELSE',\n 0x00E0: 'ELSE.IF',\n 0x00E1: 'END.IF',\n 0x00E2: 'FOR.CELL',\n 0x00E3: 'MEDIAN',\n 0x00E4: 'SUMPRODUCT',\n 0x00E5: 'SINH',\n 0x00E6: 'COSH',\n 0x00E7: 'TANH',\n 0x00E8: 'ASINH',\n 0x00E9: 'ACOSH',\n 0x00EA: 'ATANH',\n 0x00EB: 'DGET',\n 0x00EC: 'CREATE.OBJECT',\n 0x00ED: 'VOLATILE',\n 0x00EE: 'LAST.ERROR',\n 0x00EF: 'CUSTOM.UNDO',\n 0x00F0: 'CUSTOM.REPEAT',\n 0x00F1: 'FORMULA.CONVERT',\n 0x00F2: 'GET.LINK.INFO',\n 0x00F3: 'TEXT.BOX',\n 0x00F4: 'INFO',\n 0x00F5: 'GROUP',\n 0x00F6: 'GET.OBJECT',\n 0x00F7: 'DB',\n 0x00F8: 'PAUSE',\n 0x00FB: 'RESUME',\n 0x00FC: 'FREQUENCY',\n 0x00FD: 'ADD.TOOLBAR',\n 0x00FE: 'DELETE.TOOLBAR',\n 0x00FF: 'User',\n 0x0100: 'RESET.TOOLBAR',\n 0x0101: 'EVALUATE',\n 0x0102: 'GET.TOOLBAR',\n 0x0103: 'GET.TOOL',\n 0x0104: 'SPELLING.CHECK',\n 0x0105: 'ERROR.TYPE',\n 0x0106: 'APP.TITLE',\n 0x0107: 'WINDOW.TITLE',\n 0x0108: 'SAVE.TOOLBAR',\n 0x0109: 'ENABLE.TOOL',\n 0x010A: 'PRESS.TOOL',\n 0x010B: 'REGISTER.ID',\n 0x010C: 'GET.WORKBOOK',\n 0x010D: 'AVEDEV',\n 0x010E: 'BETADIST',\n 0x010F: 'GAMMALN',\n 0x0110: 'BETAINV',\n 0x0111: 'BINOMDIST',\n 0x0112: 'CHIDIST',\n 0x0113: 'CHIINV',\n 0x0114: 'COMBIN',\n 0x0115: 'CONFIDENCE',\n 0x0116: 'CRITBINOM',\n 0x0117: 'EVEN',\n 0x0118: 'EXPONDIST',\n 0x0119: 'FDIST',\n 0x011A: 'FINV',\n 0x011B: 'FISHER',\n 0x011C: 'FISHERINV',\n 0x011D: 'FLOOR',\n 0x011E: 'GAMMADIST',\n 0x011F: 'GAMMAINV',\n 0x0120: 'CEILING',\n 0x0121: 'HYPGEOMDIST',\n 0x0122: 'LOGNORMDIST',\n 0x0123: 'LOGINV',\n 0x0124: 'NEGBINOMDIST',\n 0x0125: 'NORMDIST',\n 0x0126: 'NORMSDIST',\n 0x0127: 'NORMINV',\n 0x0128: 'NORMSINV',\n 0x0129: 'STANDARDIZE',\n 0x012A: 'ODD',\n 0x012B: 'PERMUT',\n 0x012C: 'POISSON',\n 0x012D: 'TDIST',\n 0x012E: 'WEIBULL',\n 0x012F: 'SUMXMY2',\n 0x0130: 'SUMX2MY2',\n 0x0131: 'SUMX2PY2',\n 0x0132: 'CHITEST',\n 0x0133: 'CORREL',\n 0x0134: 'COVAR',\n 0x0135: 'FORECAST',\n 0x0136: 'FTEST',\n 0x0137: 'INTERCEPT',\n 0x0138: 'PEARSON',\n 0x0139: 'RSQ',\n 0x013A: 'STEYX',\n 0x013B: 'SLOPE',\n 0x013C: 'TTEST',\n 0x013D: 'PROB',\n 0x013E: 'DEVSQ',\n 0x013F: 'GEOMEAN',\n 0x0140: 'HARMEAN',\n 0x0141: 'SUMSQ',\n 0x0142: 'KURT',\n 0x0143: 'SKEW',\n 0x0144: 'ZTEST',\n 0x0145: 'LARGE',\n 0x0146: 'SMALL',\n 0x0147: 'QUARTILE',\n 0x0148: 'PERCENTILE',\n 0x0149: 'PERCENTRANK',\n 0x014A: 'MODE',\n 0x014B: 'TRIMMEAN',\n 0x014C: 'TINV',\n 0x014E: 'MOVIE.COMMAND',\n 0x014F: 'GET.MOVIE',\n 0x0150: 'CONCATENATE',\n 0x0151: 'POWER',\n 0x0152: 'PIVOT.ADD.DATA',\n 0x0153: 'GET.PIVOT.TABLE',\n 0x0154: 'GET.PIVOT.FIELD',\n 0x0155: 'GET.PIVOT.ITEM',\n 0x0156: 'RADIANS',\n 0x0157: 'DEGREES',\n 0x0158: 'SUBTOTAL',\n 0x0159: 'SUMIF',\n 0x015A: 'COUNTIF',\n 0x015B: 'COUNTBLANK',\n 0x015C: 'SCENARIO.GET',\n 0x015D: 'OPTIONS.LISTS.GET',\n 0x015E: 'ISPMT',\n 0x015F: 'DATEDIF',\n 0x0160: 'DATESTRING',\n 0x0161: 'NUMBERSTRING',\n 0x0162: 'ROMAN',\n 0x0163: 'OPEN.DIALOG',\n 0x0164: 'SAVE.DIALOG',\n 0x0165: 'VIEW.GET',\n 0x0166: 'GETPIVOTDATA',\n 0x0167: 'HYPERLINK',\n 0x0168: 'PHONETIC',\n 0x0169: 'AVERAGEA',\n 0x016A: 'MAXA',\n 0x016B: 'MINA',\n 0x016C: 'STDEVPA',\n 0x016D: 'VARPA',\n 0x016E: 'STDEVA',\n 0x016F: 'VARA',\n 0x0170: 'BAHTTEXT',\n 0x0171: 'THAIDAYOFWEEK',\n 0x0172: 'THAIDIGIT',\n 0x0173: 'THAIMONTHOFYEAR',\n 0x0174: 'THAINUMSOUND',\n 0x0175: 'THAINUMSTRING',\n 0x0176: 'THAISTRINGLENGTH',\n 0x0177: 'ISTHAIDIGIT',\n 0x0178: 'ROUNDBAHTDOWN',\n 0x0179: 'ROUNDBAHTUP',\n 0x017A: 'THAIYEAR',\n 0x017B: 'RTD',\n 0x017C: 'CUBEVALUE',\n 0x017D: 'CUBEMEMBER',\n 0x017E: 'CUBEMEMBERPROPERTY',\n 0x017F: 'CUBERANKEDMEMBER',\n 0x0180: 'HEX2BIN',\n 0x0181: 'HEX2DEC',\n 0x0182: 'HEX2OCT',\n 0x0183: 'DEC2BIN',\n 0x0184: 'DEC2HEX',\n 0x0185: 'DEC2OCT',\n 0x0186: 'OCT2BIN',\n 0x0187: 'OCT2HEX',\n 0x0188: 'OCT2DEC',\n 0x0189: 'BIN2DEC',\n 0x018A: 'BIN2OCT',\n 0x018B: 'BIN2HEX',\n 0x018C: 'IMSUB',\n 0x018D: 'IMDIV',\n 0x018E: 'IMPOWER',\n 0x018F: 'IMABS',\n 0x0190: 'IMSQRT',\n 0x0191: 'IMLN',\n 0x0192: 'IMLOG2',\n 0x0193: 'IMLOG10',\n 0x0194: 'IMSIN',\n 0x0195: 'IMCOS',\n 0x0196: 'IMEXP',\n 0x0197: 'IMARGUMENT',\n 0x0198: 'IMCONJUGATE',\n 0x0199: 'IMAGINARY',\n 0x019A: 'IMREAL',\n 0x019B: 'COMPLEX',\n 0x019C: 'IMSUM',\n 0x019D: 'IMPRODUCT',\n 0x019E: 'SERIESSUM',\n 0x019F: 'FACTDOUBLE',\n 0x01A0: 'SQRTPI',\n 0x01A1: 'QUOTIENT',\n 0x01A2: 'DELTA',\n 0x01A3: 'GESTEP',\n 0x01A4: 'ISEVEN',\n 0x01A5: 'ISODD',\n 0x01A6: 'MROUND',\n 0x01A7: 'ERF',\n 0x01A8: 'ERFC',\n 0x01A9: 'BESSELJ',\n 0x01AA: 'BESSELK',\n 0x01AB: 'BESSELY',\n 0x01AC: 'BESSELI',\n 0x01AD: 'XIRR',\n 0x01AE: 'XNPV',\n 0x01AF: 'PRICEMAT',\n 0x01B0: 'YIELDMAT',\n 0x01B1: 'INTRATE',\n 0x01B2: 'RECEIVED',\n 0x01B3: 'DISC',\n 0x01B4: 'PRICEDISC',\n 0x01B5: 'YIELDDISC',\n 0x01B6: 'TBILLEQ',\n 0x01B7: 'TBILLPRICE',\n 0x01B8: 'TBILLYIELD',\n 0x01B9: 'PRICE',\n 0x01BA: 'YIELD',\n 0x01BB: 'DOLLARDE',\n 0x01BC: 'DOLLARFR',\n 0x01BD: 'NOMINAL',\n 0x01BE: 'EFFECT',\n 0x01BF: 'CUMPRINC',\n 0x01C0: 'CUMIPMT',\n 0x01C1: 'EDATE',\n 0x01C2: 'EOMONTH',\n 0x01C3: 'YEARFRAC',\n 0x01C4: 'COUPDAYBS',\n 0x01C5: 'COUPDAYS',\n 0x01C6: 'COUPDAYSNC',\n 0x01C7: 'COUPNCD',\n 0x01C8: 'COUPNUM',\n 0x01C9: 'COUPPCD',\n 0x01CA: 'DURATION',\n 0x01CB: 'MDURATION',\n 0x01CC: 'ODDLPRICE',\n 0x01CD: 'ODDLYIELD',\n 0x01CE: 'ODDFPRICE',\n 0x01CF: 'ODDFYIELD',\n 0x01D0: 'RANDBETWEEN',\n 0x01D1: 'WEEKNUM',\n 0x01D2: 'AMORDEGRC',\n 0x01D3: 'AMORLINC',\n 0x01D4: 'CONVERT',\n 0x02D4: 'SHEETJS',\n 0x01D5: 'ACCRINT',\n 0x01D6: 'ACCRINTM',\n 0x01D7: 'WORKDAY',\n 0x01D8: 'NETWORKDAYS',\n 0x01D9: 'GCD',\n 0x01DA: 'MULTINOMIAL',\n 0x01DB: 'LCM',\n 0x01DC: 'FVSCHEDULE',\n 0x01DD: 'CUBEKPIMEMBER',\n 0x01DE: 'CUBESET',\n 0x01DF: 'CUBESETCOUNT',\n 0x01E0: 'IFERROR',\n 0x01E1: 'COUNTIFS',\n 0x01E2: 'SUMIFS',\n 0x01E3: 'AVERAGEIF',\n 0x01E4: 'AVERAGEIFS'\n };\n var FtabArgc = {\n 0x0002: 1,\n\n /* ISNA */\n 0x0003: 1,\n\n /* ISERROR */\n 0x000A: 0,\n\n /* NA */\n 0x000F: 1,\n\n /* SIN */\n 0x0010: 1,\n\n /* COS */\n 0x0011: 1,\n\n /* TAN */\n 0x0012: 1,\n\n /* ATAN */\n 0x0013: 0,\n\n /* PI */\n 0x0014: 1,\n\n /* SQRT */\n 0x0015: 1,\n\n /* EXP */\n 0x0016: 1,\n\n /* LN */\n 0x0017: 1,\n\n /* LOG10 */\n 0x0018: 1,\n\n /* ABS */\n 0x0019: 1,\n\n /* INT */\n 0x001A: 1,\n\n /* SIGN */\n 0x001B: 2,\n\n /* ROUND */\n 0x001E: 2,\n\n /* REPT */\n 0x001F: 3,\n\n /* MID */\n 0x0020: 1,\n\n /* LEN */\n 0x0021: 1,\n\n /* VALUE */\n 0x0022: 0,\n\n /* TRUE */\n 0x0023: 0,\n\n /* FALSE */\n 0x0026: 1,\n\n /* NOT */\n 0x0027: 2,\n\n /* MOD */\n 0x0028: 3,\n\n /* DCOUNT */\n 0x0029: 3,\n\n /* DSUM */\n 0x002A: 3,\n\n /* DAVERAGE */\n 0x002B: 3,\n\n /* DMIN */\n 0x002C: 3,\n\n /* DMAX */\n 0x002D: 3,\n\n /* DSTDEV */\n 0x002F: 3,\n\n /* DVAR */\n 0x0030: 2,\n\n /* TEXT */\n 0x0035: 1,\n\n /* GOTO */\n 0x003D: 3,\n\n /* MIRR */\n 0x003F: 0,\n\n /* RAND */\n 0x0041: 3,\n\n /* DATE */\n 0x0042: 3,\n\n /* TIME */\n 0x0043: 1,\n\n /* DAY */\n 0x0044: 1,\n\n /* MONTH */\n 0x0045: 1,\n\n /* YEAR */\n 0x0046: 1,\n\n /* WEEKDAY */\n 0x0047: 1,\n\n /* HOUR */\n 0x0048: 1,\n\n /* MINUTE */\n 0x0049: 1,\n\n /* SECOND */\n 0x004A: 0,\n\n /* NOW */\n 0x004B: 1,\n\n /* AREAS */\n 0x004C: 1,\n\n /* ROWS */\n 0x004D: 1,\n\n /* COLUMNS */\n 0x004F: 2,\n\n /* ABSREF */\n 0x0050: 2,\n\n /* RELREF */\n 0x0053: 1,\n\n /* TRANSPOSE */\n 0x0055: 0,\n\n /* STEP */\n 0x0056: 1,\n\n /* TYPE */\n 0x0059: 0,\n\n /* CALLER */\n 0x005A: 1,\n\n /* DEREF */\n 0x005E: 0,\n\n /* ACTIVE.CELL */\n 0x005F: 0,\n\n /* SELECTION */\n 0x0061: 2,\n\n /* ATAN2 */\n 0x0062: 1,\n\n /* ASIN */\n 0x0063: 1,\n\n /* ACOS */\n 0x0065: 3,\n\n /* HLOOKUP */\n 0x0066: 3,\n\n /* VLOOKUP */\n 0x0069: 1,\n\n /* ISREF */\n 0x006A: 1,\n\n /* GET.FORMULA */\n 0x006C: 2,\n\n /* SET.VALUE */\n 0x006F: 1,\n\n /* CHAR */\n 0x0070: 1,\n\n /* LOWER */\n 0x0071: 1,\n\n /* UPPER */\n 0x0072: 1,\n\n /* PROPER */\n 0x0075: 2,\n\n /* EXACT */\n 0x0076: 1,\n\n /* TRIM */\n 0x0077: 4,\n\n /* REPLACE */\n 0x0079: 1,\n\n /* CODE */\n 0x007E: 1,\n\n /* ISERR */\n 0x007F: 1,\n\n /* ISTEXT */\n 0x0080: 1,\n\n /* ISNUMBER */\n 0x0081: 1,\n\n /* ISBLANK */\n 0x0082: 1,\n\n /* T */\n 0x0083: 1,\n\n /* N */\n 0x0085: 1,\n\n /* FCLOSE */\n 0x0086: 1,\n\n /* FSIZE */\n 0x0087: 1,\n\n /* FREADLN */\n 0x0088: 2,\n\n /* FREAD */\n 0x0089: 2,\n\n /* FWRITELN */\n 0x008A: 2,\n\n /* FWRITE */\n 0x008C: 1,\n\n /* DATEVALUE */\n 0x008D: 1,\n\n /* TIMEVALUE */\n 0x008E: 3,\n\n /* SLN */\n 0x008F: 4,\n\n /* SYD */\n 0x0090: 4,\n\n /* DDB */\n 0x00A1: 1,\n\n /* DIALOG.BOX */\n 0x00A2: 1,\n\n /* CLEAN */\n 0x00A3: 1,\n\n /* MDETERM */\n 0x00A4: 1,\n\n /* MINVERSE */\n 0x00A5: 2,\n\n /* MMULT */\n 0x00AC: 1,\n\n /* WHILE */\n 0x00AF: 2,\n\n /* INITIATE */\n 0x00B0: 2,\n\n /* REQUEST */\n 0x00B1: 3,\n\n /* POKE */\n 0x00B2: 2,\n\n /* EXECUTE */\n 0x00B3: 1,\n\n /* TERMINATE */\n 0x00B8: 1,\n\n /* FACT */\n 0x00BA: 1,\n\n /* GET.WORKSPACE */\n 0x00BD: 3,\n\n /* DPRODUCT */\n 0x00BE: 1,\n\n /* ISNONTEXT */\n 0x00C3: 3,\n\n /* DSTDEVP */\n 0x00C4: 3,\n\n /* DVARP */\n 0x00C5: 1,\n\n /* TRUNC */\n 0x00C6: 1,\n\n /* ISLOGICAL */\n 0x00C7: 3,\n\n /* DCOUNTA */\n 0x00C9: 1,\n\n /* UNREGISTER */\n 0x00CF: 4,\n\n /* REPLACEB */\n 0x00D2: 3,\n\n /* MIDB */\n 0x00D3: 1,\n\n /* LENB */\n 0x00D4: 2,\n\n /* ROUNDUP */\n 0x00D5: 2,\n\n /* ROUNDDOWN */\n 0x00D6: 1,\n\n /* ASC */\n 0x00D7: 1,\n\n /* DBCS */\n 0x00E1: 0,\n\n /* END.IF */\n 0x00E5: 1,\n\n /* SINH */\n 0x00E6: 1,\n\n /* COSH */\n 0x00E7: 1,\n\n /* TANH */\n 0x00E8: 1,\n\n /* ASINH */\n 0x00E9: 1,\n\n /* ACOSH */\n 0x00EA: 1,\n\n /* ATANH */\n 0x00EB: 3,\n\n /* DGET */\n 0x00F4: 1,\n\n /* INFO */\n 0x00F7: 4,\n\n /* DB */\n 0x00FC: 2,\n\n /* FREQUENCY */\n 0x0101: 1,\n\n /* EVALUATE */\n 0x0105: 1,\n\n /* ERROR.TYPE */\n 0x010F: 1,\n\n /* GAMMALN */\n 0x0111: 4,\n\n /* BINOMDIST */\n 0x0112: 2,\n\n /* CHIDIST */\n 0x0113: 2,\n\n /* CHIINV */\n 0x0114: 2,\n\n /* COMBIN */\n 0x0115: 3,\n\n /* CONFIDENCE */\n 0x0116: 3,\n\n /* CRITBINOM */\n 0x0117: 1,\n\n /* EVEN */\n 0x0118: 3,\n\n /* EXPONDIST */\n 0x0119: 3,\n\n /* FDIST */\n 0x011A: 3,\n\n /* FINV */\n 0x011B: 1,\n\n /* FISHER */\n 0x011C: 1,\n\n /* FISHERINV */\n 0x011D: 2,\n\n /* FLOOR */\n 0x011E: 4,\n\n /* GAMMADIST */\n 0x011F: 3,\n\n /* GAMMAINV */\n 0x0120: 2,\n\n /* CEILING */\n 0x0121: 4,\n\n /* HYPGEOMDIST */\n 0x0122: 3,\n\n /* LOGNORMDIST */\n 0x0123: 3,\n\n /* LOGINV */\n 0x0124: 3,\n\n /* NEGBINOMDIST */\n 0x0125: 4,\n\n /* NORMDIST */\n 0x0126: 1,\n\n /* NORMSDIST */\n 0x0127: 3,\n\n /* NORMINV */\n 0x0128: 1,\n\n /* NORMSINV */\n 0x0129: 3,\n\n /* STANDARDIZE */\n 0x012A: 1,\n\n /* ODD */\n 0x012B: 2,\n\n /* PERMUT */\n 0x012C: 3,\n\n /* POISSON */\n 0x012D: 3,\n\n /* TDIST */\n 0x012E: 4,\n\n /* WEIBULL */\n 0x012F: 2,\n\n /* SUMXMY2 */\n 0x0130: 2,\n\n /* SUMX2MY2 */\n 0x0131: 2,\n\n /* SUMX2PY2 */\n 0x0132: 2,\n\n /* CHITEST */\n 0x0133: 2,\n\n /* CORREL */\n 0x0134: 2,\n\n /* COVAR */\n 0x0135: 3,\n\n /* FORECAST */\n 0x0136: 2,\n\n /* FTEST */\n 0x0137: 2,\n\n /* INTERCEPT */\n 0x0138: 2,\n\n /* PEARSON */\n 0x0139: 2,\n\n /* RSQ */\n 0x013A: 2,\n\n /* STEYX */\n 0x013B: 2,\n\n /* SLOPE */\n 0x013C: 4,\n\n /* TTEST */\n 0x0145: 2,\n\n /* LARGE */\n 0x0146: 2,\n\n /* SMALL */\n 0x0147: 2,\n\n /* QUARTILE */\n 0x0148: 2,\n\n /* PERCENTILE */\n 0x014B: 2,\n\n /* TRIMMEAN */\n 0x014C: 2,\n\n /* TINV */\n 0x0151: 2,\n\n /* POWER */\n 0x0156: 1,\n\n /* RADIANS */\n 0x0157: 1,\n\n /* DEGREES */\n 0x015A: 2,\n\n /* COUNTIF */\n 0x015B: 1,\n\n /* COUNTBLANK */\n 0x015E: 4,\n\n /* ISPMT */\n 0x015F: 3,\n\n /* DATEDIF */\n 0x0160: 1,\n\n /* DATESTRING */\n 0x0161: 2,\n\n /* NUMBERSTRING */\n 0x0168: 1,\n\n /* PHONETIC */\n 0x0170: 1,\n\n /* BAHTTEXT */\n 0x0171: 1,\n\n /* THAIDAYOFWEEK */\n 0x0172: 1,\n\n /* THAIDIGIT */\n 0x0173: 1,\n\n /* THAIMONTHOFYEAR */\n 0x0174: 1,\n\n /* THAINUMSOUND */\n 0x0175: 1,\n\n /* THAINUMSTRING */\n 0x0176: 1,\n\n /* THAISTRINGLENGTH */\n 0x0177: 1,\n\n /* ISTHAIDIGIT */\n 0x0178: 1,\n\n /* ROUNDBAHTDOWN */\n 0x0179: 1,\n\n /* ROUNDBAHTUP */\n 0x017A: 1,\n\n /* THAIYEAR */\n 0x017E: 3,\n\n /* CUBEMEMBERPROPERTY */\n 0x0181: 1,\n\n /* HEX2DEC */\n 0x0188: 1,\n\n /* OCT2DEC */\n 0x0189: 1,\n\n /* BIN2DEC */\n 0x018C: 2,\n\n /* IMSUB */\n 0x018D: 2,\n\n /* IMDIV */\n 0x018E: 2,\n\n /* IMPOWER */\n 0x018F: 1,\n\n /* IMABS */\n 0x0190: 1,\n\n /* IMSQRT */\n 0x0191: 1,\n\n /* IMLN */\n 0x0192: 1,\n\n /* IMLOG2 */\n 0x0193: 1,\n\n /* IMLOG10 */\n 0x0194: 1,\n\n /* IMSIN */\n 0x0195: 1,\n\n /* IMCOS */\n 0x0196: 1,\n\n /* IMEXP */\n 0x0197: 1,\n\n /* IMARGUMENT */\n 0x0198: 1,\n\n /* IMCONJUGATE */\n 0x0199: 1,\n\n /* IMAGINARY */\n 0x019A: 1,\n\n /* IMREAL */\n 0x019E: 4,\n\n /* SERIESSUM */\n 0x019F: 1,\n\n /* FACTDOUBLE */\n 0x01A0: 1,\n\n /* SQRTPI */\n 0x01A1: 2,\n\n /* QUOTIENT */\n 0x01A4: 1,\n\n /* ISEVEN */\n 0x01A5: 1,\n\n /* ISODD */\n 0x01A6: 2,\n\n /* MROUND */\n 0x01A8: 1,\n\n /* ERFC */\n 0x01A9: 2,\n\n /* BESSELJ */\n 0x01AA: 2,\n\n /* BESSELK */\n 0x01AB: 2,\n\n /* BESSELY */\n 0x01AC: 2,\n\n /* BESSELI */\n 0x01AE: 3,\n\n /* XNPV */\n 0x01B6: 3,\n\n /* TBILLEQ */\n 0x01B7: 3,\n\n /* TBILLPRICE */\n 0x01B8: 3,\n\n /* TBILLYIELD */\n 0x01BB: 2,\n\n /* DOLLARDE */\n 0x01BC: 2,\n\n /* DOLLARFR */\n 0x01BD: 2,\n\n /* NOMINAL */\n 0x01BE: 2,\n\n /* EFFECT */\n 0x01BF: 6,\n\n /* CUMPRINC */\n 0x01C0: 6,\n\n /* CUMIPMT */\n 0x01C1: 2,\n\n /* EDATE */\n 0x01C2: 2,\n\n /* EOMONTH */\n 0x01D0: 2,\n\n /* RANDBETWEEN */\n 0x01D4: 3,\n\n /* CONVERT */\n 0x01DC: 2,\n\n /* FVSCHEDULE */\n 0x01DF: 1,\n\n /* CUBESETCOUNT */\n 0x01E0: 2,\n\n /* IFERROR */\n 0xFFFF: 0\n };\n /* [MS-XLSX] 2.2.3 Functions */\n\n /* [MS-XLSB] 2.5.97.10 Ftab */\n\n var XLSXFutureFunctions = {\n \"_xlfn.ACOT\": \"ACOT\",\n \"_xlfn.ACOTH\": \"ACOTH\",\n \"_xlfn.AGGREGATE\": \"AGGREGATE\",\n \"_xlfn.ARABIC\": \"ARABIC\",\n \"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n \"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n \"_xlfn.BASE\": \"BASE\",\n \"_xlfn.BETA.DIST\": \"BETA.DIST\",\n \"_xlfn.BETA.INV\": \"BETA.INV\",\n \"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n \"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n \"_xlfn.BINOM.INV\": \"BINOM.INV\",\n \"_xlfn.BITAND\": \"BITAND\",\n \"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n \"_xlfn.BITOR\": \"BITOR\",\n \"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n \"_xlfn.BITXOR\": \"BITXOR\",\n \"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n \"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n \"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n \"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n \"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n \"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n \"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n \"_xlfn.COMBINA\": \"COMBINA\",\n \"_xlfn.CONCAT\": \"CONCAT\",\n \"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n \"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n \"_xlfn.COT\": \"COT\",\n \"_xlfn.COTH\": \"COTH\",\n \"_xlfn.COUNTIFS\": \"COUNTIFS\",\n \"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n \"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n \"_xlfn.CSC\": \"CSC\",\n \"_xlfn.CSCH\": \"CSCH\",\n \"_xlfn.DAYS\": \"DAYS\",\n \"_xlfn.DECIMAL\": \"DECIMAL\",\n \"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n \"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n \"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n \"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n \"_xlfn.F.DIST\": \"F.DIST\",\n \"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n \"_xlfn.F.INV\": \"F.INV\",\n \"_xlfn.F.INV.RT\": \"F.INV.RT\",\n \"_xlfn.F.TEST\": \"F.TEST\",\n \"_xlfn.FILTERXML\": \"FILTERXML\",\n \"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n \"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n \"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n \"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n \"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n \"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n \"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n \"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n \"_xlfn.GAMMA\": \"GAMMA\",\n \"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n \"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n \"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n \"_xlfn.GAUSS\": \"GAUSS\",\n \"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n \"_xlfn.IFERROR\": \"IFERROR\",\n \"_xlfn.IFNA\": \"IFNA\",\n \"_xlfn.IFS\": \"IFS\",\n \"_xlfn.IMCOSH\": \"IMCOSH\",\n \"_xlfn.IMCOT\": \"IMCOT\",\n \"_xlfn.IMCSC\": \"IMCSC\",\n \"_xlfn.IMCSCH\": \"IMCSCH\",\n \"_xlfn.IMSEC\": \"IMSEC\",\n \"_xlfn.IMSECH\": \"IMSECH\",\n \"_xlfn.IMSINH\": \"IMSINH\",\n \"_xlfn.IMTAN\": \"IMTAN\",\n \"_xlfn.ISFORMULA\": \"ISFORMULA\",\n \"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n \"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n \"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n \"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n \"_xlfn.MAXIFS\": \"MAXIFS\",\n \"_xlfn.MINIFS\": \"MINIFS\",\n \"_xlfn.MODE.MULT\": \"MODE.MULT\",\n \"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n \"_xlfn.MUNIT\": \"MUNIT\",\n \"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n \"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n \"_xlfn.NIGBINOM\": \"NIGBINOM\",\n \"_xlfn.NORM.DIST\": \"NORM.DIST\",\n \"_xlfn.NORM.INV\": \"NORM.INV\",\n \"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n \"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n \"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n \"_xlfn.PDURATION\": \"PDURATION\",\n \"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n \"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n \"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n \"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n \"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n \"_xlfn.PHI\": \"PHI\",\n \"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n \"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n \"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n \"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n \"_xlfn.RANK.AVG\": \"RANK.AVG\",\n \"_xlfn.RANK.EQ\": \"RANK.EQ\",\n \"_xlfn.RRI\": \"RRI\",\n \"_xlfn.SEC\": \"SEC\",\n \"_xlfn.SECH\": \"SECH\",\n \"_xlfn.SHEET\": \"SHEET\",\n \"_xlfn.SHEETS\": \"SHEETS\",\n \"_xlfn.SKEW.P\": \"SKEW.P\",\n \"_xlfn.STDEV.P\": \"STDEV.P\",\n \"_xlfn.STDEV.S\": \"STDEV.S\",\n \"_xlfn.SUMIFS\": \"SUMIFS\",\n \"_xlfn.SWITCH\": \"SWITCH\",\n \"_xlfn.T.DIST\": \"T.DIST\",\n \"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n \"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n \"_xlfn.T.INV\": \"T.INV\",\n \"_xlfn.T.INV.2T\": \"T.INV.2T\",\n \"_xlfn.T.TEST\": \"T.TEST\",\n \"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n \"_xlfn.UNICHAR\": \"UNICHAR\",\n \"_xlfn.UNICODE\": \"UNICODE\",\n \"_xlfn.VAR.P\": \"VAR.P\",\n \"_xlfn.VAR.S\": \"VAR.S\",\n \"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n \"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n \"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n \"_xlfn.XOR\": \"XOR\",\n \"_xlfn.Z.TEST\": \"Z.TEST\"\n };\n /* Part 3 TODO: actually parse formulae */\n\n function ods_to_csf_formula(f) {\n if (f.slice(0, 3) == \"of:\") f = f.slice(3);\n /* 5.2 Basic Expressions */\n\n if (f.charCodeAt(0) == 61) {\n f = f.slice(1);\n if (f.charCodeAt(0) == 61) f = f.slice(1);\n }\n\n f = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n /* Part 3 Section 5.8 References */\n\n f = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function ($$, $1) {\n return $1.replace(/\\./g, \"\");\n });\n /* TODO: something other than this */\n\n f = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n return f.replace(/[;~]/g, \",\").replace(/\\|/g, \";\");\n }\n\n function csf_to_ods_formula(f) {\n var o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g, \":\");\n /* TODO: something other than this */\n\n return o.replace(/;/g, \"|\").replace(/,/g, \";\");\n }\n\n function ods_to_csf_3D(r) {\n var a = r.split(\":\");\n var s = a[0].split(\".\")[0];\n return [s, a[0].split(\".\")[1] + (a.length > 1 ? \":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0]) : \"\")];\n }\n\n function csf_to_ods_3D(r) {\n return r.replace(/\\./, \"!\");\n }\n\n var strs = {}; // shared strings\n\n var _ssfopts = {}; // spreadsheet formatting options\n\n RELS.WS = [\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\", \"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"];\n /*global Map */\n\n var browser_has_Map = typeof Map !== 'undefined';\n\n function get_sst_id(sst, str, rev) {\n var i = 0,\n len = sst.length;\n\n if (rev) {\n if (browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n var revarr = browser_has_Map ? rev.get(str) : rev[str];\n\n for (; i < revarr.length; ++i) {\n if (sst[revarr[i]].t === str) {\n sst.Count++;\n return revarr[i];\n }\n }\n }\n } else for (; i < len; ++i) {\n if (sst[i].t === str) {\n sst.Count++;\n return i;\n }\n }\n\n sst[len] = {\n t: str\n };\n sst.Count++;\n sst.Unique++;\n\n if (rev) {\n if (browser_has_Map) {\n if (!rev.has(str)) rev.set(str, []);\n rev.get(str).push(len);\n } else {\n if (!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n rev[str].push(len);\n }\n }\n\n return len;\n }\n\n function col_obj_w(C, col) {\n var p = {\n min: C + 1,\n max: C + 1\n };\n /* wch (chars), wpx (pixels) */\n\n var wch = -1;\n if (col.MDW) MDW = col.MDW;\n if (col.width != null) p.customWidth = 1;else if (col.wpx != null) wch = px2char(col.wpx);else if (col.wch != null) wch = col.wch;\n\n if (wch > -1) {\n p.width = char2width(wch);\n p.customWidth = 1;\n } else if (col.width != null) p.width = col.width;\n\n if (col.hidden) p.hidden = true;\n return p;\n }\n\n function default_margins(margins, mode) {\n if (!margins) return;\n var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n if (mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n if (margins.left == null) margins.left = defs[0];\n if (margins.right == null) margins.right = defs[1];\n if (margins.top == null) margins.top = defs[2];\n if (margins.bottom == null) margins.bottom = defs[3];\n if (margins.header == null) margins.header = defs[4];\n if (margins.footer == null) margins.footer = defs[5];\n }\n\n function get_cell_style(styles, cell, opts) {\n var z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n var i = 0x3c,\n len = styles.length;\n\n if (z == null && opts.ssf) {\n for (; i < 0x188; ++i) {\n if (opts.ssf[i] == null) {\n SSF.load(cell.z, i); // $FlowIgnore\n\n opts.ssf[i] = cell.z;\n opts.revssf[cell.z] = z = i;\n break;\n }\n }\n }\n\n for (i = 0; i != len; ++i) {\n if (styles[i].numFmtId === z) return i;\n }\n\n styles[len] = {\n numFmtId: z,\n fontId: 0,\n fillId: 0,\n borderId: 0,\n xfId: 0,\n applyNumberFormat: 1\n };\n return len;\n }\n\n function safe_format(p, fmtid, fillid, opts, themes, styles) {\n try {\n if (opts.cellNF) p.z = SSF._table[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (p.t === 'z') return;\n if (p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n if (!opts || opts.cellText !== false) try {\n if (SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n if (p.t === 'e') p.w = p.w || BErr[p.v];else if (fmtid === 0) {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = SSF._general_int(p.v);else p.w = SSF._general_num(p.v);\n } else if (p.t === 'd') {\n var dd = datenum(p.v);\n if ((dd | 0) === dd) p.w = SSF._general_int(dd);else p.w = SSF._general_num(dd);\n } else if (p.v === undefined) return \"\";else p.w = SSF._general(p.v, _ssfopts);\n } else if (p.t === 'd') p.w = SSF.format(fmtid, datenum(p.v), _ssfopts);else p.w = SSF.format(fmtid, p.v, _ssfopts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (!opts.cellStyles) return;\n if (fillid != null) try {\n p.s = styles.Fills[fillid];\n\n if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n if (opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n }\n\n if (p.s.bgColor && p.s.bgColor.theme) {\n p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n if (opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n }\n } catch (e) {\n if (opts.WTF && styles.Fills) throw e;\n }\n }\n\n function check_ws(ws, sname, i) {\n if (ws && ws['!ref']) {\n var range = safe_decode_range(ws['!ref']);\n if (range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n }\n }\n\n function parse_ws_xml_dim(ws, s) {\n var d = safe_decode_range(s);\n if (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 }\n\n var mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\n var sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\n var hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\n var dimregex = /\"(\\w*:\\w*)\"/;\n var colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\n var afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\n var marginregex = /<(?:\\w:)?pageMargins[^>]*\\/>/g;\n var sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\n var svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n /* 18.3 Worksheets */\n\n function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n /* 18.3.1.99 worksheet CT_Worksheet */\n\n var s = opts.dense ? [] : {};\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var data1 = \"\",\n data2 = \"\";\n var mtch = data.match(sheetdataregex);\n\n if (mtch) {\n data1 = data.slice(0, mtch.index);\n data2 = data.slice(mtch.index + mtch[0].length);\n } else data1 = data2 = data;\n /* 18.3.1.82 sheetPr CT_SheetPr */\n\n\n var sheetPr = data1.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n /* 18.3.1.35 dimension CT_SheetDimension */\n\n var ridx = (data1.match(/<(?:\\w*:)?dimension/) || {\n index: -1\n }).index;\n\n if (ridx > 0) {\n var ref = data1.slice(ridx, ridx + 50).match(dimregex);\n if (ref) parse_ws_xml_dim(s, ref[1]);\n }\n /* 18.3.1.88 sheetViews CT_SheetViews */\n\n\n var svs = data1.match(svsregex);\n if (svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n /* 18.3.1.17 cols CT_Cols */\n\n var columns = [];\n\n if (opts.cellStyles) {\n /* 18.3.1.13 col CT_Col */\n var cols = data1.match(colregex);\n if (cols) parse_ws_xml_cols(columns, cols);\n }\n /* 18.3.1.80 sheetData CT_SheetData ? */\n\n\n if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n /* 18.3.1.2 autoFilter CT_AutoFilter */\n\n var afilter = data2.match(afregex);\n if (afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n /* 18.3.1.55 mergeCells CT_MergeCells */\n\n var merges = [];\n\n var _merge = data2.match(mergecregex);\n\n if (_merge) for (ridx = 0; ridx != _merge.length; ++ridx) {\n merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\") + 1));\n }\n /* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\n var hlink = data2.match(hlinkregex);\n if (hlink) parse_ws_xml_hlinks(s, hlink, rels);\n /* 18.3.1.62 pageMargins CT_PageMargins */\n\n var margins = data2.match(marginregex);\n if (margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n if (!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows > 0 && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (columns.length > 0) s[\"!cols\"] = columns;\n if (merges.length > 0) s[\"!merges\"] = merges;\n return s;\n }\n\n function write_ws_xml_merges(merges) {\n if (merges.length === 0) return \"\";\n var o = '';\n\n for (var i = 0; i != merges.length; ++i) {\n o += '';\n }\n\n return o + '';\n }\n /* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\n\n\n function parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {\n var data = parsexmltag(sheetPr);\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n }\n\n function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n var needed = false;\n var props = {},\n payload = null;\n\n if (opts.bookType !== 'xlsx' && wb.vbaraw) {\n var cname = wb.SheetNames[idx];\n\n try {\n if (wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname;\n } catch (e) {}\n\n needed = true;\n props.codeName = utf8write(escapexml(cname));\n }\n\n if (ws && ws[\"!outline\"]) {\n var outlineprops = {\n summaryBelow: 1,\n summaryRight: 1\n };\n if (ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n if (ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n payload = (payload || \"\") + writextag('outlinePr', null, outlineprops);\n }\n\n if (!needed && !payload) return;\n o[o.length] = writextag('sheetPr', payload, props);\n }\n /* 18.3.1.85 sheetProtection CT_SheetProtection */\n\n\n var sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\n var sheetprot_deftrue = [\"formatColumns\", \"formatRows\", \"formatCells\", \"insertColumns\", \"insertRows\", \"insertHyperlinks\", \"deleteColumns\", \"deleteRows\", \"sort\", \"autoFilter\", \"pivotTables\"];\n\n function write_ws_xml_protection(sp) {\n // algorithmName, hashValue, saltValue, spinCount\n var o = {\n sheet: 1\n };\n sheetprot_deffalse.forEach(function (n) {\n if (sp[n] != null && sp[n]) o[n] = \"1\";\n });\n sheetprot_deftrue.forEach(function (n) {\n if (sp[n] != null && !sp[n]) o[n] = \"0\";\n });\n /* TODO: algorithm */\n\n if (sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n return writextag('sheetProtection', null, o);\n }\n\n function parse_ws_xml_hlinks(s, data, rels) {\n var dense = Array.isArray(s);\n\n for (var i = 0; i != data.length; ++i) {\n var val = parsexmltag(utf8read(data[i]), true);\n if (!val.ref) return;\n var rel = ((rels || {})['!id'] || [])[val.id];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.location) val.Target += \"#\" + val.location;\n } else {\n val.Target = \"#\" + val.location;\n rel = {\n Target: val.Target,\n TargetMode: 'Internal'\n };\n }\n\n val.Rel = rel;\n\n if (val.tooltip) {\n val.Tooltip = val.tooltip;\n delete val.tooltip;\n }\n\n var rng = safe_decode_range(val.ref);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var addr = encode_cell({\n c: C,\n r: R\n });\n\n if (dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: \"z\",\n v: undefined\n };\n s[R][C].l = val;\n } else {\n if (!s[addr]) s[addr] = {\n t: \"z\",\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n }\n }\n\n function parse_ws_xml_margins(margin) {\n var o = {};\n [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function (k) {\n if (margin[k]) o[k] = parseFloat(margin[k]);\n });\n return o;\n }\n\n function write_ws_xml_margins(margin) {\n default_margins(margin);\n return writextag('pageMargins', null, margin);\n }\n\n function parse_ws_xml_cols(columns, cols) {\n var seencol = false;\n\n for (var coli = 0; coli != cols.length; ++coli) {\n var coll = parsexmltag(cols[coli], true);\n if (coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n var colm = parseInt(coll.min, 10) - 1,\n colM = parseInt(coll.max, 10) - 1;\n delete coll.min;\n delete coll.max;\n coll.width = +coll.width;\n\n if (!seencol && coll.width) {\n seencol = true;\n find_mdw_colw(coll.width);\n }\n\n process_col(coll);\n\n while (colm <= colM) {\n columns[colm++] = dup(coll);\n }\n }\n }\n\n function write_ws_xml_cols(ws, cols) {\n var o = [\"\"],\n col;\n\n for (var i = 0; i != cols.length; ++i) {\n if (!(col = cols[i])) continue;\n o[o.length] = writextag('col', null, col_obj_w(i, col));\n }\n\n o[o.length] = \"\";\n return o.join(\"\");\n }\n\n function parse_ws_xml_autofilter(data) {\n var o = {\n ref: (data.match(/ref=\"([^\"]*)\"/) || [])[1]\n };\n return o;\n }\n\n function write_ws_xml_autofilter(data, ws, wb, idx) {\n var ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n };\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n return writextag(\"autoFilter\", null, {\n ref: ref\n });\n }\n /* 18.3.1.88 sheetViews CT_SheetViews */\n\n /* 18.3.1.87 sheetView CT_SheetView */\n\n\n var sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\n\n function parse_ws_xml_sheetviews(data, wb) {\n if (!wb.Views) wb.Views = [{}];\n (data.match(sviewregex) || []).forEach(function (r, i) {\n var tag = parsexmltag(r); // $FlowIgnore\n\n if (!wb.Views[i]) wb.Views[i] = {}; // $FlowIgnore\n\n if (parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n });\n }\n\n function write_ws_xml_sheetviews(ws, opts, idx, wb) {\n var sview = {\n workbookViewId: \"0\"\n }; // $FlowIgnore\n\n if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n return writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n }\n\n function write_ws_xml_cell(cell, ref, ws, opts) {\n if (cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n var vv = \"\";\n var oldt = cell.t,\n oldv = cell.v;\n if (cell.t !== \"z\") switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'n':\n vv = '' + cell.v;\n break;\n\n case 'e':\n vv = BErr[cell.v];\n break;\n\n case 'd':\n if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();else {\n cell = dup(cell);\n cell.t = 'n';\n vv = '' + (cell.v = datenum(parseDate(cell.v)));\n }\n if (typeof cell.z === 'undefined') cell.z = SSF._table[14];\n break;\n\n default:\n vv = cell.v;\n break;\n }\n var v = writetag('v', escapexml(vv)),\n o = {\n r: ref\n };\n /* TODO: cell style */\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n if (os !== 0) o.s = os;\n\n switch (cell.t) {\n case 'n':\n break;\n\n case 'd':\n o.t = \"d\";\n break;\n\n case 'b':\n o.t = \"b\";\n break;\n\n case 'e':\n o.t = \"e\";\n break;\n\n case 'z':\n break;\n\n default:\n if (cell.v == null) {\n delete cell.t;\n break;\n }\n\n if (opts && opts.bookSST) {\n v = writetag('v', '' + get_sst_id(opts.Strings, cell.v, opts.revStrings));\n o.t = \"s\";\n break;\n }\n\n o.t = \"str\";\n break;\n }\n\n if (cell.t != oldt) {\n cell.t = oldt;\n cell.v = oldv;\n }\n\n if (typeof cell.f == \"string\" && cell.f) {\n var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {\n t: \"array\",\n ref: cell.F\n } : null;\n v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n }\n\n if (cell.l) ws['!links'].push([ref, cell.l]);\n if (cell.c) ws['!comments'].push([ref, cell.c]);\n return writextag('c', v, o);\n }\n\n var parse_ws_xml_data = function () {\n var cellregex = /<(?:\\w+:)?c[ \\/>]/,\n rowregex = /<\\/(?:\\w+:)?row>/;\n var rregex = /r=[\"']([^\"']*)[\"']/,\n isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n var refregex = /ref=[\"']([^\"']*)[\"']/;\n var match_v = matchtag(\"v\"),\n match_f = matchtag(\"f\");\n return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {\n var ri = 0,\n x = \"\",\n cells = [],\n cref = [],\n idx = 0,\n i = 0,\n cc = 0,\n d = \"\",\n p;\n var tag,\n tagr = 0,\n tagc = 0;\n var sstr, ftag;\n var fmtid = 0,\n fillid = 0;\n var do_format = Array.isArray(styles.CellXf),\n cf;\n var arrayf = [];\n var sharedf = [];\n var dense = Array.isArray(s);\n var rows = [],\n rowobj = {},\n rowrite = false;\n var sheetStubs = !!opts.sheetStubs;\n\n for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n x = marr[mt].trim();\n var xlen = x.length;\n if (xlen === 0) continue;\n /* 18.3.1.73 row CT_Row */\n\n for (ri = 0; ri < xlen; ++ri) {\n if (x.charCodeAt(ri) === 62) break;\n }\n\n ++ri;\n tag = parsexmltag(x.slice(0, ri), true);\n tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n tagc = -1;\n if (opts.sheetRows && opts.sheetRows < tagr) continue;\n if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n if (opts && opts.cellStyles) {\n rowobj = {};\n rowrite = false;\n\n if (tag.ht) {\n rowrite = true;\n rowobj.hpt = parseFloat(tag.ht);\n rowobj.hpx = pt2px(rowobj.hpt);\n }\n\n if (tag.hidden == \"1\") {\n rowrite = true;\n rowobj.hidden = true;\n }\n\n if (tag.outlineLevel != null) {\n rowrite = true;\n rowobj.level = +tag.outlineLevel;\n }\n\n if (rowrite) rows[tagr - 1] = rowobj;\n }\n /* 18.3.1.4 c CT_Cell */\n\n\n cells = x.slice(ri).split(cellregex);\n\n for (var rslice = 0; rslice != cells.length; ++rslice) {\n if (cells[rslice].trim().charAt(0) != \"<\") break;\n }\n\n cells = cells.slice(rslice);\n\n for (ri = 0; ri != cells.length; ++ri) {\n x = cells[ri].trim();\n if (x.length === 0) continue;\n cref = x.match(rregex);\n idx = ri;\n i = 0;\n cc = 0;\n x = \"\" : \"\") + x;\n\n if (cref != null && cref.length === 2) {\n idx = 0;\n d = cref[1];\n\n for (i = 0; i != d.length; ++i) {\n if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n --idx;\n tagc = idx;\n } else ++tagc;\n\n for (i = 0; i != x.length; ++i) {\n if (x.charCodeAt(i) === 62) break;\n }\n\n ++i;\n tag = parsexmltag(x.slice(0, i), true);\n if (!tag.r) tag.r = encode_cell({\n r: tagr - 1,\n c: tagc\n });\n d = x.slice(i);\n p = {\n t: \"\"\n };\n if ((cref = d.match(match_v)) != null && cref[1] !== '') p.v = unescapexml(cref[1]);\n\n if (opts.cellFormula) {\n if ((cref = d.match(match_f)) != null && cref[1] !== '') {\n /* TODO: match against XLSXFutureFunctions */\n p.f = unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n if (!opts.xlfn) p.f = _xlfn(p.f);\n\n if (cref[0].indexOf('t=\"array\"') > -1) {\n p.F = (d.match(refregex) || [])[1];\n if (p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n } else if (cref[0].indexOf('t=\"shared\"') > -1) {\n // TODO: parse formula\n ftag = parsexmltag(cref[0]);\n\n var ___f = unescapexml(utf8read(cref[1]));\n\n if (!opts.xlfn) ___f = _xlfn(___f);\n sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n }\n } else if (cref = d.match(/]*\\/>/)) {\n ftag = parsexmltag(cref[0]);\n if (sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]\n /*[0].ref*/\n , tag.r);\n }\n /* TODO: factor out contains logic */\n\n\n var _tag = decode_cell(tag.r);\n\n for (i = 0; i < arrayf.length; ++i) {\n if (_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r) if (_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c) p.F = arrayf[i][1];\n }\n }\n\n if (tag.t == null && p.v === undefined) {\n if (p.f || p.F) {\n p.v = 0;\n p.t = \"n\";\n } else if (!sheetStubs) continue;else p.t = \"z\";\n } else p.t = tag.t || \"n\";\n\n if (guess.s.c > tagc) guess.s.c = tagc;\n if (guess.e.c < tagc) guess.e.c = tagc;\n /* 18.18.11 t ST_CellType */\n\n switch (p.t) {\n case 'n':\n if (p.v == \"\" || p.v == null) {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else p.v = parseFloat(p.v);\n\n break;\n\n case 's':\n if (typeof p.v == 'undefined') {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else {\n sstr = strs[parseInt(p.v, 10)];\n p.v = sstr.t;\n p.r = sstr.r;\n if (opts.cellHTML) p.h = sstr.h;\n }\n\n break;\n\n case 'str':\n p.t = \"s\";\n p.v = p.v != null ? utf8read(p.v) : '';\n if (opts.cellHTML) p.h = escapehtml(p.v);\n break;\n\n case 'inlineStr':\n cref = d.match(isregex);\n p.t = 's';\n\n if (cref != null && (sstr = parse_si(cref[1]))) {\n p.v = sstr.t;\n if (opts.cellHTML) p.h = sstr.h;\n } else p.v = \"\";\n\n break;\n\n case 'b':\n p.v = parsexmlbool(p.v);\n break;\n\n case 'd':\n if (opts.cellDates) p.v = parseDate(p.v, 1);else {\n p.v = datenum(parseDate(p.v, 1));\n p.t = 'n';\n }\n break;\n\n /* error string in .w, number in .v */\n\n case 'e':\n if (!opts || opts.cellText !== false) p.w = p.v;\n p.v = RBErr[p.v];\n break;\n }\n /* formatting */\n\n\n fmtid = fillid = 0;\n cf = null;\n\n if (do_format && tag.s !== undefined) {\n cf = styles.CellXf[tag.s];\n\n if (cf != null) {\n if (cf.numFmtId != null) fmtid = cf.numFmtId;\n\n if (opts.cellStyles) {\n if (cf.fillId != null) fillid = cf.fillId;\n }\n }\n }\n\n safe_format(p, fmtid, fillid, opts, themes, styles);\n\n if (opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) {\n p.t = 'd';\n p.v = numdate(p.v);\n }\n\n if (dense) {\n var _r = decode_cell(tag.r);\n\n if (!s[_r.r]) s[_r.r] = [];\n s[_r.r][_r.c] = p;\n } else s[tag.r] = p;\n }\n }\n\n if (rows.length > 0) s['!rows'] = rows;\n };\n }();\n\n function write_ws_xml_data(ws, opts, idx, wb) {\n var o = [],\n r = [],\n range = safe_decode_range(ws['!ref']),\n cell = \"\",\n ref,\n rr = \"\",\n cols = [],\n R = 0,\n C = 0,\n rows = ws['!rows'];\n var dense = Array.isArray(ws);\n var params = {\n r: rr\n },\n row,\n height = -1;\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (R = range.s.r; R <= range.e.r; ++R) {\n r = [];\n rr = encode_row(R);\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n ref = cols[C] + rr;\n\n var _cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (_cell === undefined) continue;\n if ((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n }\n\n if (r.length > 0 || rows && rows[R]) {\n params = {\n r: rr\n };\n\n if (rows && rows[R]) {\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n }\n\n o[o.length] = writextag('row', r.join(\"\"), params);\n }\n }\n\n if (rows) for (; R < rows.length; ++R) {\n if (rows && rows[R]) {\n params = {\n r: R + 1\n };\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n\n o[o.length] = writextag('row', \"\", params);\n }\n }\n return o.join(\"\");\n }\n\n var WS_XML_ROOT = writextag('worksheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:r': XMLNS.r\n });\n\n function write_ws_xml(idx, opts, wb, rels) {\n var o = [XML_HEADER, WS_XML_ROOT];\n var s = wb.SheetNames[idx],\n sidx = 0,\n rdata = \"\";\n var ws = wb.Sheets[s];\n if (ws == null) ws = {};\n var ref = ws['!ref'] || 'A1';\n var range = safe_decode_range(ref);\n\n if (range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n range.e.c = Math.min(range.e.c, 0x3FFF);\n range.e.r = Math.min(range.e.c, 0xFFFFF);\n ref = encode_range(range);\n }\n\n if (!rels) rels = {};\n ws['!comments'] = [];\n var _drawing = [];\n write_ws_xml_sheetpr(ws, wb, idx, opts, o);\n o[o.length] = writextag('dimension', null, {\n 'ref': ref\n });\n o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n /* TODO: store in WB, process styles */\n\n if (opts.sheetFormat) o[o.length] = writextag('sheetFormatPr', null, {\n defaultRowHeight: opts.sheetFormat.defaultRowHeight || '16',\n baseColWidth: opts.sheetFormat.baseColWidth || '10',\n outlineLevelRow: opts.sheetFormat.outlineLevelRow || '7'\n });\n if (ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = write_ws_xml_cols(ws, ws['!cols']);\n o[sidx = o.length] = '';\n ws['!links'] = [];\n\n if (ws['!ref'] != null) {\n rdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n if (rdata.length > 0) o[o.length] = rdata;\n }\n\n if (o.length > sidx + 1) {\n o[o.length] = '';\n o[sidx] = o[sidx].replace(\"/>\", \">\");\n }\n /* sheetCalcPr */\n\n\n if (ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n /* protectedRanges */\n\n /* scenarios */\n\n if (ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n /* sortState */\n\n /* dataConsolidate */\n\n /* customSheetViews */\n\n if (ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = write_ws_xml_merges(ws['!merges']);\n /* phoneticPr */\n\n /* conditionalFormatting */\n\n /* dataValidations */\n\n var relc = -1,\n rel,\n rId = -1;\n\n if (ws['!links'].length > 0) {\n o[o.length] = \"\";\n ws['!links'].forEach(function (l) {\n if (!l[1].Target) return;\n rel = {\n \"ref\": l[0]\n };\n\n if (l[1].Target.charAt(0) != \"#\") {\n rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n rel[\"r:id\"] = \"rId\" + rId;\n }\n\n if ((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));\n if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n o[o.length] = writextag(\"hyperlink\", null, rel);\n });\n o[o.length] = \"\";\n }\n\n delete ws['!links'];\n /* printOptions */\n\n if (ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n /* pageSetup */\n\n /* headerFooter */\n\n /* rowBreaks */\n\n /* colBreaks */\n\n /* customProperties */\n\n /* cellWatches */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {\n numberStoredAsText: 1,\n sqref: ref\n }));\n /* smartTags */\n\n if (_drawing.length > 0) {\n rId = add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!drawing'] = _drawing;\n }\n\n if (ws['!comments'].length > 0) {\n rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n o[o.length] = writextag(\"legacyDrawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!legacy'] = rId;\n }\n /* legacyDrawingHF */\n\n /* picture */\n\n /* oleObjects */\n\n /* controls */\n\n /* webPublishItems */\n\n /* tableParts */\n\n /* extLst */\n\n\n if (o.length > 1) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.726 BrtRowHdr */\n\n\n function parse_BrtRowHdr(data, length) {\n var z = {};\n var tgt = data.l + length;\n z.r = data.read_shift(4);\n data.l += 4; // TODO: ixfe\n\n var miyRw = data.read_shift(2);\n data.l += 1; // TODO: top/bot padding\n\n var flags = data.read_shift(1);\n data.l = tgt;\n if (flags & 0x07) z.level = flags & 0x07;\n if (flags & 0x10) z.hidden = true;\n if (flags & 0x20) z.hpt = miyRw / 20;\n return z;\n }\n\n function write_BrtRowHdr(R, range, ws) {\n var o = new_buf(17 + 8 * 16);\n var row = (ws['!rows'] || [])[R] || {};\n o.write_shift(4, R);\n o.write_shift(4, 0);\n /* TODO: ixfe */\n\n var miyRw = 0x0140;\n if (row.hpx) miyRw = px2pt(row.hpx) * 20;else if (row.hpt) miyRw = row.hpt * 20;\n o.write_shift(2, miyRw);\n o.write_shift(1, 0);\n /* top/bot padding */\n\n var flags = 0x0;\n if (row.level) flags |= row.level;\n if (row.hidden) flags |= 0x10;\n if (row.hpx || row.hpt) flags |= 0x20;\n o.write_shift(1, flags);\n o.write_shift(1, 0);\n /* phonetic guide */\n\n /* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\n var ncolspan = 0,\n lcs = o.l;\n o.l += 4;\n var caddr = {\n r: R,\n c: 0\n };\n\n for (var i = 0; i < 16; ++i) {\n if (range.s.c > i + 1 << 10 || range.e.c < i << 10) continue;\n var first = -1,\n last = -1;\n\n for (var j = i << 10; j < i + 1 << 10; ++j) {\n caddr.c = j;\n var cell = Array.isArray(ws) ? (ws[caddr.r] || [])[caddr.c] : ws[encode_cell(caddr)];\n\n if (cell) {\n if (first < 0) first = j;\n last = j;\n }\n }\n\n if (first < 0) continue;\n ++ncolspan;\n o.write_shift(4, first);\n o.write_shift(4, last);\n }\n\n var l = o.l;\n o.l = lcs;\n o.write_shift(4, ncolspan);\n o.l = l;\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n\n function write_row_header(ba, ws, range, R) {\n var o = write_BrtRowHdr(R, range, ws);\n if (o.length > 17 || (ws['!rows'] || [])[R]) write_record(ba, 'BrtRowHdr', o);\n }\n /* [MS-XLSB] 2.4.820 BrtWsDim */\n\n\n var parse_BrtWsDim = parse_UncheckedRfX;\n var write_BrtWsDim = write_UncheckedRfX;\n /* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\n\n function parse_BrtWsFmtInfo() {} //function write_BrtWsFmtInfo(ws, o) { }\n\n /* [MS-XLSB] 2.4.823 BrtWsProp */\n\n\n function parse_BrtWsProp(data, length) {\n var z = {};\n /* TODO: pull flags */\n\n data.l += 19;\n z.name = parse_XLSBCodeName(data, length - 19);\n return z;\n }\n\n function write_BrtWsProp(str, o) {\n if (o == null) o = new_buf(84 + 4 * str.length);\n\n for (var i = 0; i < 3; ++i) {\n o.write_shift(1, 0);\n }\n\n write_BrtColor({\n auto: 1\n }, o);\n o.write_shift(-4, -1);\n o.write_shift(-4, -1);\n write_XLSBCodeName(str, o);\n return o.slice(0, o.l);\n }\n /* [MS-XLSB] 2.4.306 BrtCellBlank */\n\n\n function parse_BrtCellBlank(data) {\n var cell = parse_XLSBCell(data);\n return [cell];\n }\n\n function write_BrtCellBlank(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n return write_XLSBCell(ncell, o);\n }\n /* [MS-XLSB] 2.4.307 BrtCellBool */\n\n\n function parse_BrtCellBool(data) {\n var cell = parse_XLSBCell(data);\n var fBool = data.read_shift(1);\n return [cell, fBool, 'b'];\n }\n\n function write_BrtCellBool(cell, ncell, o) {\n if (o == null) o = new_buf(9);\n write_XLSBCell(ncell, o);\n o.write_shift(1, cell.v ? 1 : 0);\n return o;\n }\n /* [MS-XLSB] 2.4.308 BrtCellError */\n\n\n function parse_BrtCellError(data) {\n var cell = parse_XLSBCell(data);\n var bError = data.read_shift(1);\n return [cell, bError, 'e'];\n }\n /* [MS-XLSB] 2.4.311 BrtCellIsst */\n\n\n function parse_BrtCellIsst(data) {\n var cell = parse_XLSBCell(data);\n var isst = data.read_shift(4);\n return [cell, isst, 's'];\n }\n\n function write_BrtCellIsst(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n o.write_shift(4, ncell.v);\n return o;\n }\n /* [MS-XLSB] 2.4.313 BrtCellReal */\n\n\n function parse_BrtCellReal(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_Xnum(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtCellReal(cell, ncell, o) {\n if (o == null) o = new_buf(16);\n write_XLSBCell(ncell, o);\n write_Xnum(cell.v, o);\n return o;\n }\n /* [MS-XLSB] 2.4.314 BrtCellRk */\n\n\n function parse_BrtCellRk(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_RkNumber(data);\n return [cell, value, 'n'];\n }\n\n function write_BrtCellRk(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n write_RkNumber(cell.v, o);\n return o;\n }\n /* [MS-XLSB] 2.4.317 BrtCellSt */\n\n\n function parse_BrtCellSt(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_XLWideString(data);\n return [cell, value, 'str'];\n }\n\n function write_BrtCellSt(cell, ncell, o) {\n if (o == null) o = new_buf(12 + 4 * cell.v.length);\n write_XLSBCell(ncell, o);\n write_XLWideString(cell.v, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.653 BrtFmlaBool */\n\n\n function parse_BrtFmlaBool(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'b'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.654 BrtFmlaError */\n\n\n function parse_BrtFmlaError(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'e'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.655 BrtFmlaNum */\n\n\n function parse_BrtFmlaNum(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_Xnum(data);\n var o = [cell, value, 'n'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.656 BrtFmlaString */\n\n\n function parse_BrtFmlaString(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_XLWideString(data);\n var o = [cell, value, 'str'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.682 BrtMergeCell */\n\n\n var parse_BrtMergeCell = parse_UncheckedRfX;\n var write_BrtMergeCell = write_UncheckedRfX;\n /* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\n\n function write_BrtBeginMergeCells(cnt, o) {\n if (o == null) o = new_buf(4);\n o.write_shift(4, cnt);\n return o;\n }\n /* [MS-XLSB] 2.4.662 BrtHLink */\n\n\n function parse_BrtHLink(data, length) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var relId = parse_XLNullableWideString(data);\n var loc = parse_XLWideString(data);\n var tooltip = parse_XLWideString(data);\n var display = parse_XLWideString(data);\n data.l = end;\n var o = {\n rfx: rfx,\n relId: relId,\n loc: loc,\n display: display\n };\n if (tooltip) o.Tooltip = tooltip;\n return o;\n }\n\n function write_BrtHLink(l, rId) {\n var o = new_buf(50 + 4 * (l[1].Target.length + (l[1].Tooltip || \"\").length));\n write_UncheckedRfX({\n s: decode_cell(l[0]),\n e: decode_cell(l[0])\n }, o);\n write_RelID(\"rId\" + rId, o);\n var locidx = l[1].Target.indexOf(\"#\");\n var loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx + 1);\n write_XLWideString(loc || \"\", o);\n write_XLWideString(l[1].Tooltip || \"\", o);\n write_XLWideString(\"\", o);\n return o.slice(0, o.l);\n }\n /* [MS-XLSB] 2.4.692 BrtPane */\n\n\n function parse_BrtPane() {}\n /* [MS-XLSB] 2.4.6 BrtArrFmla */\n\n\n function parse_BrtArrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_RfX(data, 16);\n var fAlwaysCalc = data.read_shift(1);\n var o = [rfx];\n o[2] = fAlwaysCalc;\n\n if (opts.cellFormula) {\n var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.750 BrtShrFmla */\n\n\n function parse_BrtShrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var o = [rfx];\n\n if (opts.cellFormula) {\n var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n data.l = end;\n } else data.l = end;\n\n return o;\n }\n /* [MS-XLSB] 2.4.323 BrtColInfo */\n\n /* TODO: once XLS ColInfo is set, combine the functions */\n\n\n function write_BrtColInfo(C, col, o) {\n if (o == null) o = new_buf(18);\n var p = col_obj_w(C, col);\n o.write_shift(-4, C);\n o.write_shift(-4, C);\n o.write_shift(4, (p.width || 10) * 256);\n o.write_shift(4, 0\n /*ixfe*/\n ); // style\n\n var flags = 0;\n if (col.hidden) flags |= 0x01;\n if (typeof p.width == 'number') flags |= 0x02;\n if (col.level) flags |= col.level << 8;\n o.write_shift(2, flags); // bit flag\n\n return o;\n }\n /* [MS-XLSB] 2.4.678 BrtMargins */\n\n\n var BrtMarginKeys = [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"];\n\n function parse_BrtMargins(data) {\n var margins = {};\n BrtMarginKeys.forEach(function (k) {\n margins[k] = parse_Xnum(data, 8);\n });\n return margins;\n }\n\n function write_BrtMargins(margins, o) {\n if (o == null) o = new_buf(6 * 8);\n default_margins(margins);\n BrtMarginKeys.forEach(function (k) {\n write_Xnum(margins[k], o);\n });\n return o;\n }\n /* [MS-XLSB] 2.4.299 BrtBeginWsView */\n\n\n function parse_BrtBeginWsView(data) {\n var f = data.read_shift(2);\n data.l += 28;\n return {\n RTL: f & 0x20\n };\n }\n\n function write_BrtBeginWsView(ws, Workbook, o) {\n if (o == null) o = new_buf(30);\n var f = 0x39c;\n if ((((Workbook || {}).Views || [])[0] || {}).RTL) f |= 0x20;\n o.write_shift(2, f); // bit flag\n\n o.write_shift(4, 0);\n o.write_shift(4, 0); // view first row\n\n o.write_shift(4, 0); // view first col\n\n o.write_shift(1, 0); // gridline color ICV\n\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 100); // zoom scale\n\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0); // workbook view id\n\n return o;\n }\n /* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\n\n\n function write_BrtCellIgnoreEC(ref) {\n var o = new_buf(24);\n o.write_shift(4, 4);\n o.write_shift(4, 1);\n write_UncheckedRfX(ref, o);\n return o;\n }\n /* [MS-XLSB] 2.4.748 BrtSheetProtection */\n\n\n function write_BrtSheetProtection(sp, o) {\n if (o == null) o = new_buf(16 * 4 + 2);\n o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n o.write_shift(4, 1); // this record should not be written if no protection\n\n [[\"objects\", false], // fObjects\n [\"scenarios\", false], // fScenarios\n [\"formatCells\", true], // fFormatCells\n [\"formatColumns\", true], // fFormatColumns\n [\"formatRows\", true], // fFormatRows\n [\"insertColumns\", true], // fInsertColumns\n [\"insertRows\", true], // fInsertRows\n [\"insertHyperlinks\", true], // fInsertHyperlinks\n [\"deleteColumns\", true], // fDeleteColumns\n [\"deleteRows\", true], // fDeleteRows\n [\"selectLockedCells\", false], // fSelLockedCells\n [\"sort\", true], // fSort\n [\"autoFilter\", true], // fAutoFilter\n [\"pivotTables\", true], // fPivotTables\n [\"selectUnlockedCells\", false] // fSelUnlockedCells\n ].forEach(function (n) {\n if (n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);else o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n });\n return o;\n }\n\n function parse_BrtDVal() {}\n\n function parse_BrtDVal14() {}\n /* [MS-XLSB] 2.1.7.61 Worksheet */\n\n\n function parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {\n if (!data) return data;\n var opts = _opts || {};\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var s = opts.dense ? [] : {};\n var ref;\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var state = [];\n var pass = false,\n end = false;\n var row, p, cf, R, C, addr, sstr, rr, cell;\n var merges = [];\n opts.biff = 12;\n opts['!row'] = 0;\n var ai = 0,\n af = false;\n var arrayf = [];\n var sharedf = {};\n var supbooks = opts.supbooks || wb.supbooks || [[]];\n supbooks.sharedf = sharedf;\n supbooks.arrayf = arrayf;\n supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function (x) {\n return x.name;\n });\n\n if (!opts.supbooks) {\n opts.supbooks = supbooks;\n if (wb.Names) for (var i = 0; i < wb.Names.length; ++i) {\n supbooks[0][i + 1] = wb.Names[i];\n }\n }\n\n var colinfo = [],\n rowinfo = [];\n var seencol = false;\n recordhopper(data, function ws_parse(val, R_n, RT) {\n if (end) return;\n\n switch (RT) {\n case 0x0094:\n /* 'BrtWsDim' */\n ref = val;\n break;\n\n case 0x0000:\n /* 'BrtRowHdr' */\n row = val;\n if (opts.sheetRows && opts.sheetRows <= row.r) end = true;\n rr = encode_row(R = row.r);\n opts['!row'] = row.r;\n\n if (val.hidden || val.hpt || val.level != null) {\n if (val.hpt) val.hpx = pt2px(val.hpt);\n rowinfo[val.r] = val;\n }\n\n break;\n\n case 0x0002:\n /* 'BrtCellRk' */\n\n case 0x0003:\n /* 'BrtCellError' */\n\n case 0x0004:\n /* 'BrtCellBool' */\n\n case 0x0005:\n /* 'BrtCellReal' */\n\n case 0x0006:\n /* 'BrtCellSt' */\n\n case 0x0007:\n /* 'BrtCellIsst' */\n\n case 0x0008:\n /* 'BrtFmlaString' */\n\n case 0x0009:\n /* 'BrtFmlaNum' */\n\n case 0x000A:\n /* 'BrtFmlaBool' */\n\n case 0x000B:\n /* 'BrtFmlaError' */\n p = {\n t: val[2]\n };\n\n switch (val[2]) {\n case 'n':\n p.v = val[1];\n break;\n\n case 's':\n sstr = strs[val[1]];\n p.v = sstr.t;\n p.r = sstr.r;\n break;\n\n case 'b':\n p.v = val[1] ? true : false;\n break;\n\n case 'e':\n p.v = val[1];\n if (opts.cellText !== false) p.w = BErr[p.v];\n break;\n\n case 'str':\n p.t = 's';\n p.v = val[1];\n break;\n }\n\n if (cf = styles.CellXf[val[0].iStyleRef]) safe_format(p, cf.numFmtId, null, opts, themes, styles);\n C = val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (opts.cellFormula) {\n af = false;\n\n for (ai = 0; ai < arrayf.length; ++ai) {\n var aii = arrayf[ai];\n if (row.r >= aii[0].s.r && row.r <= aii[0].e.r) if (C >= aii[0].s.c && C <= aii[0].e.c) {\n p.F = encode_range(aii[0]);\n af = true;\n }\n }\n\n if (!af && val.length > 3) p.f = val[3];\n }\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n\n if (opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n var _d = SSF.parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n\n break;\n\n case 0x0001:\n /* 'BrtCellBlank' */\n if (!opts.sheetStubs || pass) break;\n p = {\n t: 'z',\n v: undefined\n };\n C = val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n break;\n\n case 0x00B0:\n /* 'BrtMergeCell' */\n merges.push(val);\n break;\n\n case 0x01EE:\n /* 'BrtHLink' */\n var rel = rels['!id'][val.relId];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.loc) val.Target += \"#\" + val.loc;\n val.Rel = rel;\n } else if (val.relId == '') {\n val.Target = \"#\" + val.loc;\n }\n\n for (R = val.rfx.s.r; R <= val.rfx.e.r; ++R) {\n for (C = val.rfx.s.c; C <= val.rfx.e.c; ++C) {\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: 'z',\n v: undefined\n };\n s[R][C].l = val;\n } else {\n addr = encode_cell({\n c: C,\n r: R\n });\n if (!s[addr]) s[addr] = {\n t: 'z',\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n\n break;\n\n case 0x01AA:\n /* 'BrtArrFmla' */\n if (!opts.cellFormula) break;\n arrayf.push(val);\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n cell.F = encode_range(val[0]);\n break;\n\n case 0x01AB:\n /* 'BrtShrFmla' */\n if (!opts.cellFormula) break;\n sharedf[encode_cell(val[0].s)] = val[1];\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n break;\n\n /* identical to 'ColInfo' in XLS */\n\n case 0x003C:\n /* 'BrtColInfo' */\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256,\n hidden: !!(val.flags & 0x01),\n level: val.level\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n\n break;\n\n case 0x00A1:\n /* 'BrtBeginAFilter' */\n s['!autofilter'] = {\n ref: encode_range(val)\n };\n break;\n\n case 0x01DC:\n /* 'BrtMargins' */\n s['!margins'] = val;\n break;\n\n case 0x0093:\n /* 'BrtWsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n break;\n\n case 0x0089:\n /* 'BrtBeginWsView' */\n if (!wb.Views) wb.Views = [{}];\n if (!wb.Views[0]) wb.Views[0] = {};\n if (val.RTL) wb.Views[0].RTL = true;\n break;\n\n case 0x01E5:\n /* 'BrtWsFmtInfo' */\n break;\n\n case 0x0040:\n /* 'BrtDVal' */\n\n case 0x041D:\n /* 'BrtDVal14' */\n break;\n\n case 0x0097:\n /* 'BrtPane' */\n break;\n\n case 0x00AF:\n /* 'BrtAFilterDateGroupItem' */\n\n case 0x0284:\n /* 'BrtActiveX' */\n\n case 0x0271:\n /* 'BrtBigName' */\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x018C:\n /* 'BrtBrk' */\n\n case 0x0458:\n /* 'BrtCFIcon' */\n\n case 0x047A:\n /* 'BrtCFRuleExt' */\n\n case 0x01D7:\n /* 'BrtCFVO' */\n\n case 0x041A:\n /* 'BrtCFVO14' */\n\n case 0x0289:\n /* 'BrtCellIgnoreEC' */\n\n case 0x0451:\n /* 'BrtCellIgnoreEC14' */\n\n case 0x0031:\n /* 'BrtCellMeta' */\n\n case 0x024D:\n /* 'BrtCellSmartTagProperty' */\n\n case 0x025F:\n /* 'BrtCellWatch' */\n\n case 0x0234:\n /* 'BrtColor' */\n\n case 0x041F:\n /* 'BrtColor14' */\n\n case 0x00A8:\n /* 'BrtColorFilter' */\n\n case 0x00AE:\n /* 'BrtCustomFilter' */\n\n case 0x049C:\n /* 'BrtCustomFilter14' */\n\n case 0x01F3:\n /* 'BrtDRef' */\n\n case 0x01FB:\n /* 'BrtDXF' */\n\n case 0x0226:\n /* 'BrtDrawing' */\n\n case 0x00AB:\n /* 'BrtDynamicFilter' */\n\n case 0x00A7:\n /* 'BrtFilter' */\n\n case 0x0499:\n /* 'BrtFilter14' */\n\n case 0x00A9:\n /* 'BrtIconFilter' */\n\n case 0x049D:\n /* 'BrtIconFilter14' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x0295:\n /* 'BrtListPart' */\n\n case 0x027F:\n /* 'BrtOleObject' */\n\n case 0x01DE:\n /* 'BrtPageSetup' */\n\n case 0x0219:\n /* 'BrtPhoneticInfo' */\n\n case 0x01DD:\n /* 'BrtPrintOptions' */\n\n case 0x0218:\n /* 'BrtRangeProtection' */\n\n case 0x044F:\n /* 'BrtRangeProtection14' */\n\n case 0x02A8:\n /* 'BrtRangeProtectionIso' */\n\n case 0x0450:\n /* 'BrtRangeProtectionIso14' */\n\n case 0x0400:\n /* 'BrtRwDescent' */\n\n case 0x0098:\n /* 'BrtSel' */\n\n case 0x0297:\n /* 'BrtSheetCalcProp' */\n\n case 0x0217:\n /* 'BrtSheetProtection' */\n\n case 0x02A6:\n /* 'BrtSheetProtectionIso' */\n\n case 0x01F8:\n /* 'BrtSlc' */\n\n case 0x0413:\n /* 'BrtSparkline' */\n\n case 0x01AC:\n /* 'BrtTable' */\n\n case 0x00AA:\n /* 'BrtTop10Filter' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0032:\n /* 'BrtValueMeta' */\n\n case 0x0816:\n /* 'BrtWebExtension' */\n\n case 0x0415:\n /* 'BrtWsFmtInfoEx14' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n }, opts);\n delete opts.supbooks;\n delete opts['!row'];\n if (!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\n if (opts.sheetRows && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (merges.length > 0) s[\"!merges\"] = merges;\n if (colinfo.length > 0) s[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n return s;\n }\n /* TODO: something useful -- this is a stub */\n\n\n function write_ws_bin_cell(ba, cell, R, C, opts, ws) {\n if (cell.v === undefined) return;\n var vv = \"\";\n\n switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'd':\n // no BrtCellDate :(\n cell = dup(cell);\n cell.z = cell.z || SSF._table[14];\n cell.v = datenum(parseDate(cell.v));\n cell.t = 'n';\n break;\n\n /* falls through */\n\n case 'n':\n case 'e':\n vv = '' + cell.v;\n break;\n\n default:\n vv = cell.v;\n break;\n }\n\n var o = {\n r: R,\n c: C\n };\n /* TODO: cell style */\n\n o.s = get_cell_style(opts.cellXfs, cell, opts);\n if (cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n if (cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\n switch (cell.t) {\n case 's':\n case 'str':\n if (opts.bookSST) {\n vv = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n o.t = \"s\";\n o.v = vv;\n write_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n } else {\n o.t = \"str\";\n write_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n }\n\n return;\n\n case 'n':\n /* TODO: determine threshold for Real vs RK */\n if (cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));else write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n return;\n\n case 'b':\n o.t = \"b\";\n write_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n return;\n\n case 'e':\n /* TODO: error */\n o.t = \"e\";\n break;\n }\n\n write_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n }\n\n function write_CELLTABLE(ba, ws, idx, opts) {\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref,\n rr = \"\",\n cols = [];\n write_record(ba, 'BrtBeginSheetData');\n var dense = Array.isArray(ws);\n var cap = range.e.r;\n if (ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\n for (var R = range.s.r; R <= cap; ++R) {\n rr = encode_row(R);\n /* [ACCELLTABLE] */\n\n /* BrtRowHdr */\n\n write_row_header(ba, ws, range, R);\n if (R <= range.e.r) for (var C = range.s.c; C <= range.e.c; ++C) {\n /* *16384CELL */\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_bin_cell(ba, cell, R, C, opts, ws);\n }\n }\n\n write_record(ba, 'BrtEndSheetData');\n }\n\n function write_MERGECELLS(ba, ws) {\n if (!ws || !ws['!merges']) return;\n write_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n ws['!merges'].forEach(function (m) {\n write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m));\n });\n write_record(ba, 'BrtEndMergeCells');\n }\n\n function write_COLINFOS(ba, ws) {\n if (!ws || !ws['!cols']) return;\n write_record(ba, 'BrtBeginColInfos');\n ws['!cols'].forEach(function (m, i) {\n if (m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m));\n });\n write_record(ba, 'BrtEndColInfos');\n }\n\n function write_IGNOREECS(ba, ws) {\n if (!ws || !ws['!ref']) return;\n write_record(ba, 'BrtBeginCellIgnoreECs');\n write_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n write_record(ba, 'BrtEndCellIgnoreECs');\n }\n\n function write_HLINKS(ba, ws, rels) {\n /* *BrtHLink */\n ws['!links'].forEach(function (l) {\n if (!l[1].Target) return;\n var rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n write_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n });\n delete ws['!links'];\n }\n\n function write_LEGACYDRAWING(ba, ws, idx, rels) {\n /* [BrtLegacyDrawing] */\n if (ws['!comments'].length > 0) {\n var rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n write_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n ws['!legacy'] = rId;\n }\n }\n\n function write_AUTOFILTER(ba, ws, wb, idx) {\n if (!ws['!autofilter']) return;\n var data = ws['!autofilter'];\n var ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n /* Update FilterDatabase defined name for the worksheet */\n\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n };\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n write_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n /* *FILTERCOLUMN */\n\n /* [SORTSTATE] */\n\n /* BrtEndAFilter */\n\n write_record(ba, \"BrtEndAFilter\");\n }\n\n function write_WSVIEWS2(ba, ws, Workbook) {\n write_record(ba, \"BrtBeginWsViews\");\n {\n /* 1*WSVIEW2 */\n\n /* [ACUID] */\n write_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n /* [BrtPane] */\n\n /* *4BrtSel */\n\n /* *4SXSELECT */\n\n /* *FRT */\n\n write_record(ba, \"BrtEndWsView\");\n }\n /* *FRT */\n\n write_record(ba, \"BrtEndWsViews\");\n }\n\n function write_WSFMTINFO() {\n /* [ACWSFMTINFO] */\n //write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n }\n\n function write_SHEETPROTECT(ba, ws) {\n if (!ws['!protect']) return;\n /* [BrtSheetProtectionIso] */\n\n write_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n }\n\n function write_ws_bin(idx, opts, wb, rels) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n var c = s;\n\n try {\n if (wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c;\n } catch (e) {}\n\n var r = safe_decode_range(ws['!ref'] || \"A1\");\n\n if (r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n r.e.c = Math.min(r.e.c, 0x3FFF);\n r.e.r = Math.min(r.e.c, 0xFFFFF);\n }\n\n ws['!links'] = [];\n /* passed back to write_zip and removed there */\n\n ws['!comments'] = [];\n write_record(ba, \"BrtBeginSheet\");\n if (wb.vbaraw) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c));\n write_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n write_WSVIEWS2(ba, ws, wb.Workbook);\n write_WSFMTINFO(ba, ws);\n write_COLINFOS(ba, ws, idx, opts, wb);\n write_CELLTABLE(ba, ws, idx, opts, wb);\n /* [BrtSheetCalcProp] */\n\n write_SHEETPROTECT(ba, ws);\n /* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\n /* [SCENMAN] */\n\n write_AUTOFILTER(ba, ws, wb, idx);\n /* [SORTSTATE] */\n\n /* [DCON] */\n\n /* [USERSHVIEWS] */\n\n write_MERGECELLS(ba, ws);\n /* [BrtPhoneticInfo] */\n\n /* *CONDITIONALFORMATTING */\n\n /* [DVALS] */\n\n write_HLINKS(ba, ws, rels);\n /* [BrtPrintOptions] */\n\n if (ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n /* [BrtPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* [RWBRK] */\n\n /* [COLBRK] */\n\n /* *BrtBigName */\n\n /* [CELLWATCHES] */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) write_IGNOREECS(ba, ws);\n /* [SMARTTAGS] */\n\n /* [BrtDrawing] */\n\n write_LEGACYDRAWING(ba, ws, idx, rels);\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [OLEOBJECTS] */\n\n /* [ACTIVEXCONTROLS] */\n\n /* [WEBPUBITEMS] */\n\n /* [LISTPARTS] */\n\n /* FRTWORKSHEET */\n\n write_record(ba, \"BrtEndSheet\");\n return ba.end();\n }\n\n RELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\n RELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\n function parse_Cache(data) {\n var col = [];\n var num = data.match(/^/);\n var f;\n /* 21.2.2.150 pt CT_NumVal */\n\n (data.match(/(.*?)<\\/c:pt>/mg) || []).forEach(function (pt) {\n var q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n if (!q) return;\n col[+q[1]] = num ? +q[2] : q[2];\n });\n /* 21.2.2.71 formatCode CT_Xstring */\n\n var nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\", \"General\"])[1]);\n (data.match(/(.*?)<\\/c:f>/mg) || []).forEach(function (F) {\n f = F.replace(/<.*?>/g, \"\");\n });\n return [col, nf, f];\n }\n /* 21.2 DrawingML - Charts */\n\n\n function parse_chart(data, name, opts, rels, wb, csheet) {\n var cs = csheet || {\n \"!type\": \"chart\"\n };\n if (!data) return csheet;\n /* 21.2.2.27 chart CT_Chart */\n\n var C = 0,\n R = 0,\n col = \"A\";\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* 21.2.2.120 numCache CT_NumData */\n\n (data.match(/[\\s\\S]*?<\\/c:numCache>/gm) || []).forEach(function (nc) {\n var cache = parse_Cache(nc);\n refguess.s.r = refguess.s.c = 0;\n refguess.e.c = C;\n col = encode_col(C);\n cache[0].forEach(function (n, i) {\n cs[col + encode_row(i)] = {\n t: 'n',\n v: n,\n z: cache[1]\n };\n R = i;\n });\n if (refguess.e.r < R) refguess.e.r = R;\n ++C;\n });\n if (C > 0) cs[\"!ref\"] = encode_range(refguess);\n return cs;\n }\n\n RELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n var CS_XML_ROOT = writextag('chartsheet', null, {\n 'xmlns': XMLNS.main[0],\n 'xmlns:r': XMLNS.r\n });\n /* 18.3 Worksheets also covers Chartsheets */\n\n function parse_cs_xml(data, opts, idx, rels, wb) {\n if (!data) return data;\n /* 18.3.1.12 chartsheet CT_ChartSheet */\n\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n };\n var m;\n /* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\n var sheetPr = data.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n /* 18.3.1.36 drawing CT_Drawing */\n\n if (m = data.match(/drawing r:id=\"(.*?)\"/)) s['!rel'] = m[1];\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n }\n\n function write_cs_xml(idx, opts, wb, rels) {\n var o = [XML_HEADER, CS_XML_ROOT];\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId1\"\n });\n add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.331 BrtCsProp */\n\n\n function parse_BrtCsProp(data, length) {\n data.l += 10;\n var name = parse_XLWideString(data, length - 10);\n return {\n name: name\n };\n }\n /* [MS-XLSB] 2.1.7.7 Chart Sheet */\n\n\n function parse_cs_bin(data, opts, idx, rels, wb) {\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n };\n var state = [];\n var pass = false;\n recordhopper(data, function cs_parse(val, R_n, RT) {\n switch (RT) {\n case 0x0226:\n /* 'BrtDrawing' */\n s['!rel'] = val;\n break;\n\n case 0x028B:\n /* 'BrtCsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n break;\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x028C:\n /* 'BrtCsPageSetup' */\n\n case 0x029D:\n /* 'BrtCsProtection' */\n\n case 0x02A7:\n /* 'BrtCsProtectionIso' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x01DC:\n /* 'BrtMargins' */\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) state.push(R_n);else if ((R_n || \"\").indexOf(\"End\") > 0) state.pop();else if (!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n }\n }, opts);\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n }\n\n function write_cs_bin() {\n var ba = buf_array();\n write_record(ba, \"BrtBeginSheet\");\n /* [BrtCsProp] */\n\n /* CSVIEWS */\n\n /* [[BrtCsProtectionIso] BrtCsProtection] */\n\n /* [USERCSVIEWS] */\n\n /* [BrtMargins] */\n\n /* [BrtCsPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* BrtDrawing */\n\n /* [BrtLegacyDrawing] */\n\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [WEBPUBITEMS] */\n\n /* FRTCHARTSHEET */\n\n write_record(ba, \"BrtEndSheet\");\n return ba.end();\n }\n /* 18.2.28 (CT_WorkbookProtection) Defaults */\n\n\n var WBPropsDef = [['allowRefreshQuery', false, \"bool\"], ['autoCompressPictures', true, \"bool\"], ['backupFile', false, \"bool\"], ['checkCompatibility', false, \"bool\"], ['CodeName', ''], ['date1904', false, \"bool\"], ['defaultThemeVersion', 0, \"int\"], ['filterPrivacy', false, \"bool\"], ['hidePivotFieldList', false, \"bool\"], ['promptedSolutions', false, \"bool\"], ['publishItems', false, \"bool\"], ['refreshAllConnections', false, \"bool\"], ['saveExternalLinkValues', true, \"bool\"], ['showBorderUnselectedTables', true, \"bool\"], ['showInkAnnotation', true, \"bool\"], ['showObjects', 'all'], ['showPivotChartFilter', false, \"bool\"], ['updateLinks', 'userSet']];\n /* 18.2.30 (CT_BookView) Defaults */\n\n var WBViewDef = [['activeTab', 0, \"int\"], ['autoFilterDateGrouping', true, \"bool\"], ['firstSheet', 0, \"int\"], ['minimized', false, \"bool\"], ['showHorizontalScroll', true, \"bool\"], ['showSheetTabs', true, \"bool\"], ['showVerticalScroll', true, \"bool\"], ['tabRatio', 600, \"int\"], ['visibility', 'visible'] //window{Height,Width}, {x,y}Window\n ];\n /* 18.2.19 (CT_Sheet) Defaults */\n\n var SheetDef = [//['state', 'visible']\n ];\n /* 18.2.2 (CT_CalcPr) Defaults */\n\n var CalcPrDef = [['calcCompleted', 'true'], ['calcMode', 'auto'], ['calcOnSave', 'true'], ['concurrentCalc', 'true'], ['fullCalcOnLoad', 'false'], ['fullPrecision', 'true'], ['iterate', 'false'], ['iterateCount', '100'], ['iterateDelta', '0.001'], ['refMode', 'A1']];\n /* 18.2.3 (CT_CustomWorkbookView) Defaults */\n\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\n function push_defaults_array(target, defaults) {\n for (var j = 0; j != target.length; ++j) {\n var w = target[j];\n\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (w[z[0]] == null) w[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]);\n break;\n\n case \"int\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10);\n break;\n }\n }\n }\n }\n\n function push_defaults(target, defaults) {\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (target[z[0]] == null) target[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]);\n break;\n\n case \"int\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10);\n break;\n }\n }\n }\n\n function parse_wb_defaults(wb) {\n push_defaults(wb.WBProps, WBPropsDef);\n push_defaults(wb.CalcPr, CalcPrDef);\n push_defaults_array(wb.WBView, WBViewDef);\n push_defaults_array(wb.Sheets, SheetDef);\n _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n }\n\n function safe1904(wb) {\n /* TODO: store date1904 somewhere else */\n if (!wb.Workbook) return \"false\";\n if (!wb.Workbook.WBProps) return \"false\";\n return parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n }\n\n var badchars = \"][*?\\/\\\\\".split(\"\");\n\n function check_ws_name(n, safe) {\n if (n.length > 31) {\n if (safe) return false;\n throw new Error(\"Sheet names cannot exceed 31 chars\");\n }\n\n var _good = true;\n badchars.forEach(function (c) {\n if (n.indexOf(c) == -1) return;\n if (!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n _good = false;\n });\n return _good;\n }\n\n function check_wb_names(N, S, codes) {\n N.forEach(function (n, i) {\n check_ws_name(n);\n\n for (var j = 0; j < i; ++j) {\n if (n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n }\n\n if (codes) {\n var cn = S && S[i] && S[i].CodeName || n;\n if (cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n }\n });\n }\n\n function check_wb(wb) {\n if (!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n if (!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n var Sheets = wb.Workbook && wb.Workbook.Sheets || [];\n check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n }\n /* TODO: validate workbook */\n\n }\n /* 18.2 Workbook */\n\n\n var wbnsregex = /<\\w+:workbook/;\n\n function parse_wb_xml(data, opts) {\n if (!data) throw new Error(\"Could not find file\");\n var wb = {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n Names: [],\n xmlns: \"\"\n };\n var pass = false,\n xmlns = \"xmlns\";\n var dname = {},\n dnstart = 0;\n data.replace(tagregex, function xml_wb(x, idx) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n /* 18.2.13 fileVersion CT_FileVersion ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.12 fileSharing CT_FileSharing ? */\n\n case '':\n break;\n\n /* 18.2.28 workbookPr CT_WorkbookPr ? */\n\n case '':\n WBPropsDef.forEach(function (w) {\n if (y[w[0]] == null) return;\n\n switch (w[2]) {\n case \"bool\":\n wb.WBProps[w[0]] = parsexmlbool(y[w[0]]);\n break;\n\n case \"int\":\n wb.WBProps[w[0]] = parseInt(y[w[0]], 10);\n break;\n\n default:\n wb.WBProps[w[0]] = y[w[0]];\n }\n });\n if (y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n break;\n\n case '':\n break;\n\n /* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\n case '':\n break;\n\n /* 18.2.1 bookViews CT_BookViews ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.30 workbookView CT_BookView + */\n\n case '':\n delete y[0];\n wb.WBView.push(y);\n break;\n\n case '':\n break;\n\n /* 18.2.20 sheets CT_Sheets 1 */\n\n case '':\n case '':\n break;\n // aggregate sheet\n\n /* 18.2.19 sheet CT_Sheet + */\n\n case '':\n break;\n\n /* 18.2.15 functionGroups CT_FunctionGroups ? */\n\n case '':\n break;\n\n /* 18.2.14 functionGroup CT_FunctionGroup + */\n\n case '':\n case '':\n break;\n\n /* 18.2.8 externalReference CT_ExternalReference + */\n\n case '':\n break;\n\n case '':\n case '':\n pass = false;\n break;\n\n /* 18.2.5 definedName CT_DefinedName + */\n\n case '':\n {\n dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n wb.Names.push(dname);\n }\n break;\n\n case '':\n break;\n\n /* 18.2.2 calcPr CT_CalcPr ? */\n\n case '':\n delete y[0];\n wb.CalcPr = y;\n break;\n\n case '':\n break;\n\n /* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.18 pivotCaches CT_PivotCaches ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.22 smartTagType CT_SmartTagType ? */\n\n case '':\n break;\n\n /* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\n case '':\n break;\n\n /* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.7 ext CT_Extension + */\n\n case '':\n pass = false;\n break;\n\n /* Others */\n\n case '':\n pass = true;\n break;\n\n case '':\n pass = false;\n break;\n\n /* TODO */\n\n case ' 0;\n /* fileVersion */\n\n /* fileSharing */\n\n var workbookPr = {\n codeName: \"ThisWorkbook\"\n };\n\n if (wb.Workbook && wb.Workbook.WBProps) {\n WBPropsDef.forEach(function (x) {\n if (wb.Workbook.WBProps[x[0]] == null) return;\n if (wb.Workbook.WBProps[x[0]] == x[1]) return;\n workbookPr[x[0]] = wb.Workbook.WBProps[x[0]];\n });\n\n if (wb.Workbook.WBProps.CodeName) {\n workbookPr.codeName = wb.Workbook.WBProps.CodeName;\n delete workbookPr.CodeName;\n }\n }\n\n o[o.length] = writextag('workbookPr', null, workbookPr);\n /* workbookProtection */\n\n var sheets = wb.Workbook && wb.Workbook.Sheets || [];\n var i = 0;\n /* bookViews only written if first worksheet is hidden */\n\n if (sheets && sheets[0] && !!sheets[0].Hidden) {\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n if (!sheets[i]) break;\n if (!sheets[i].Hidden) break;\n }\n\n if (i == wb.SheetNames.length) i = 0;\n o[o.length] = '';\n o[o.length] = \"\";\n }\n\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n var sht = {\n name: escapexml(wb.SheetNames[i].slice(0, 31))\n };\n sht.sheetId = \"\" + (i + 1);\n sht[\"r:id\"] = \"rId\" + (i + 1);\n if (sheets[i]) switch (sheets[i].Hidden) {\n case 1:\n sht.state = \"hidden\";\n break;\n\n case 2:\n sht.state = \"veryHidden\";\n break;\n }\n o[o.length] = writextag('sheet', null, sht);\n }\n\n o[o.length] = \"\";\n /* functionGroups */\n\n /* externalReferences */\n\n if (write_names) {\n o[o.length] = \"\";\n if (wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function (n) {\n var d = {\n name: n.Name\n };\n if (n.Comment) d.comment = n.Comment;\n if (n.Sheet != null) d.localSheetId = \"\" + n.Sheet;\n if (n.Hidden) d.hidden = \"1\";\n if (!n.Ref) return;\n o[o.length] = writextag('definedName', escapexml(n.Ref), d);\n });\n o[o.length] = \"\";\n }\n /* calcPr */\n\n /* oleSize */\n\n /* customWorkbookViews */\n\n /* pivotCaches */\n\n /* smartTagPr */\n\n /* smartTagTypes */\n\n /* webPublishing */\n\n /* fileRecoveryPr */\n\n /* webPublishObjects */\n\n /* extLst */\n\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n }\n /* [MS-XLSB] 2.4.304 BrtBundleSh */\n\n\n function parse_BrtBundleSh(data, length) {\n var z = {};\n z.Hidden = data.read_shift(4); //hsState ST_SheetState\n\n z.iTabID = data.read_shift(4);\n z.strRelID = parse_RelID(data, length - 8);\n z.name = parse_XLWideString(data);\n return z;\n }\n\n function write_BrtBundleSh(data, o) {\n if (!o) o = new_buf(127);\n o.write_shift(4, data.Hidden);\n o.write_shift(4, data.iTabID);\n write_RelID(data.strRelID, o);\n write_XLWideString(data.name.slice(0, 31), o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.815 BrtWbProp */\n\n\n function parse_BrtWbProp(data, length) {\n var o = {};\n var flags = data.read_shift(4);\n o.defaultThemeVersion = data.read_shift(4);\n var strName = length > 8 ? parse_XLWideString(data) : \"\";\n if (strName.length > 0) o.CodeName = strName;\n o.autoCompressPictures = !!(flags & 0x10000);\n o.backupFile = !!(flags & 0x40);\n o.checkCompatibility = !!(flags & 0x1000);\n o.date1904 = !!(flags & 0x01);\n o.filterPrivacy = !!(flags & 0x08);\n o.hidePivotFieldList = !!(flags & 0x400);\n o.promptedSolutions = !!(flags & 0x10);\n o.publishItems = !!(flags & 0x800);\n o.refreshAllConnections = !!(flags & 0x40000);\n o.saveExternalLinkValues = !!(flags & 0x80);\n o.showBorderUnselectedTables = !!(flags & 0x04);\n o.showInkAnnotation = !!(flags & 0x20);\n o.showObjects = [\"all\", \"placeholders\", \"none\"][flags >> 13 & 0x03];\n o.showPivotChartFilter = !!(flags & 0x8000);\n o.updateLinks = [\"userSet\", \"never\", \"always\"][flags >> 8 & 0x03];\n return o;\n }\n\n function write_BrtWbProp(data, o) {\n if (!o) o = new_buf(72);\n var flags = 0;\n\n if (data) {\n /* TODO: mirror parse_BrtWbProp fields */\n if (data.filterPrivacy) flags |= 0x08;\n }\n\n o.write_shift(4, flags);\n o.write_shift(4, 0);\n write_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n return o.slice(0, o.l);\n }\n\n function parse_BrtFRTArchID$(data, length) {\n var o = {};\n data.read_shift(4);\n o.ArchID = data.read_shift(4);\n data.l += length - 8;\n return o;\n }\n /* [MS-XLSB] 2.4.687 BrtName */\n\n\n function parse_BrtName(data, length, opts) {\n var end = data.l + length;\n data.l += 4; //var flags = data.read_shift(4);\n\n data.l += 1; //var chKey = data.read_shift(1);\n\n var itab = data.read_shift(4);\n var name = parse_XLNameWideString(data);\n var formula = parse_XLSBNameParsedFormula(data, 0, opts);\n var comment = parse_XLNullableWideString(data); //if(0 /* fProc */) {\n // unusedstring1: XLNullableWideString\n // description: XLNullableWideString\n // helpTopic: XLNullableWideString\n // unusedstring2: XLNullableWideString\n //}\n\n data.l = end;\n var out = {\n Name: name,\n Ptg: formula\n };\n if (itab < 0xFFFFFFF) out.Sheet = itab;\n if (comment) out.Comment = comment;\n return out;\n }\n /* [MS-XLSB] 2.1.7.61 Workbook */\n\n\n function parse_wb_bin(data, opts) {\n var wb = {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n xmlns: \"\"\n };\n var state = [];\n var pass = false;\n if (!opts) opts = {};\n opts.biff = 12;\n var Names = [];\n var supbooks = [[]];\n supbooks.SheetNames = [];\n supbooks.XTI = [];\n recordhopper(data, function hopper_wb(val, R_n, RT) {\n switch (RT) {\n case 0x009C:\n /* 'BrtBundleSh' */\n supbooks.SheetNames.push(val.name);\n wb.Sheets.push(val);\n break;\n\n case 0x0099:\n /* 'BrtWbProp' */\n wb.WBProps = val;\n break;\n\n case 0x0027:\n /* 'BrtName' */\n if (val.Sheet != null) opts.SID = val.Sheet;\n val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n delete opts.SID;\n delete val.Ptg;\n Names.push(val);\n break;\n\n case 0x040C:\n /* 'BrtNameExt' */\n break;\n\n case 0x0165:\n /* 'BrtSupSelf' */\n\n case 0x0166:\n /* 'BrtSupSame' */\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n case 0x029B:\n /* 'BrtSupAddin' */\n if (!supbooks[0].length) supbooks[0] = [RT, val];else supbooks.push([RT, val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 0x016A:\n /* 'BrtExternSheet' */\n if (supbooks.length === 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 0x0169:\n /* 'BrtPlaceholderName' */\n break;\n\n /* case 'BrtModelTimeGroupingCalcCol' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0C01:\n /* 'BrtRevisionPtr' */\n\n case 0x0817:\n /* 'BrtAbsPath15' */\n\n case 0x0216:\n /* 'BrtBookProtection' */\n\n case 0x02A5:\n /* 'BrtBookProtectionIso' */\n\n case 0x009E:\n /* 'BrtBookView' */\n\n case 0x009D:\n /* 'BrtCalcProp' */\n\n case 0x0262:\n /* 'BrtCrashRecErr' */\n\n case 0x0802:\n /* 'BrtDecoupledPivotCacheID' */\n\n case 0x009B:\n /* 'BrtFileRecover' */\n\n case 0x0224:\n /* 'BrtFileSharing' */\n\n case 0x02A4:\n /* 'BrtFileSharingIso' */\n\n case 0x0080:\n /* 'BrtFileVersion' */\n\n case 0x0299:\n /* 'BrtFnGroup' */\n\n case 0x0850:\n /* 'BrtModelRelationship' */\n\n case 0x084D:\n /* 'BrtModelTable' */\n\n case 0x0225:\n /* 'BrtOleSize' */\n\n case 0x0805:\n /* 'BrtPivotTableRef' */\n\n case 0x0254:\n /* 'BrtSmartTagType' */\n\n case 0x081C:\n /* 'BrtTableSlicerCacheID' */\n\n case 0x081B:\n /* 'BrtTableSlicerCacheIDs' */\n\n case 0x0822:\n /* 'BrtTimelineCachePivotCacheID' */\n\n case 0x018D:\n /* 'BrtUserBookView' */\n\n case 0x009A:\n /* 'BrtWbFactoid' */\n\n case 0x045D:\n /* 'BrtWbProp14' */\n\n case 0x0229:\n /* 'BrtWebOpt' */\n\n case 0x082B:\n /* 'BrtWorkBookPr15' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(R_n);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0010:\n /* 'BrtFRTArchID$' */\n break;\n\n default:\n if ((R_n || \"\").indexOf(\"Begin\") > 0) {\n /* empty */\n } else if ((R_n || \"\").indexOf(\"End\") > 0) {\n /* empty */\n } else if (!pass || opts.WTF && state[state.length - 1] != \"BrtACBegin\" && state[state.length - 1] != \"BrtFRTBegin\") throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\n }\n }, opts);\n parse_wb_defaults(wb); // $FlowIgnore\n\n wb.Names = Names;\n wb.supbooks = supbooks;\n return wb;\n }\n\n function write_BUNDLESHS(ba, wb) {\n write_record(ba, \"BrtBeginBundleShs\");\n\n for (var idx = 0; idx != wb.SheetNames.length; ++idx) {\n var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n var d = {\n Hidden: viz,\n iTabID: idx + 1,\n strRelID: 'rId' + (idx + 1),\n name: wb.SheetNames[idx]\n };\n write_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n }\n\n write_record(ba, \"BrtEndBundleShs\");\n }\n /* [MS-XLSB] 2.4.649 BrtFileVersion */\n\n\n function write_BrtFileVersion(data, o) {\n if (!o) o = new_buf(127);\n\n for (var i = 0; i != 4; ++i) {\n o.write_shift(4, 0);\n }\n\n write_XLWideString(\"SheetJS\", o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(\"7262\", o);\n o.length = o.l;\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n /* [MS-XLSB] 2.4.301 BrtBookView */\n\n\n function write_BrtBookView(idx, o) {\n if (!o) o = new_buf(29);\n o.write_shift(-4, 0);\n o.write_shift(-4, 460);\n o.write_shift(4, 28800);\n o.write_shift(4, 17600);\n o.write_shift(4, 500);\n o.write_shift(4, idx);\n o.write_shift(4, idx);\n var flags = 0x78;\n o.write_shift(1, flags);\n return o.length > o.l ? o.slice(0, o.l) : o;\n }\n\n function write_BOOKVIEWS(ba, wb) {\n /* required if hidden tab appears before visible tab */\n if (!wb.Workbook || !wb.Workbook.Sheets) return;\n var sheets = wb.Workbook.Sheets;\n var i = 0,\n vistab = -1,\n hidden = -1;\n\n for (; i < sheets.length; ++i) {\n if (!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;else if (sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n }\n\n if (hidden > vistab) return;\n write_record(ba, \"BrtBeginBookViews\");\n write_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n /* 1*(BrtBookView *FRT) */\n\n write_record(ba, \"BrtEndBookViews\");\n }\n /* [MS-XLSB] 2.4.305 BrtCalcProp */\n\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\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 */\n\n\n function write_wb_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, \"BrtBeginBook\");\n write_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n /* [[BrtFileSharingIso] BrtFileSharing] */\n\n write_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n /* [ACABSPATH] */\n\n /* [[BrtBookProtectionIso] BrtBookProtection] */\n\n write_BOOKVIEWS(ba, wb, opts);\n write_BUNDLESHS(ba, wb, opts);\n /* [FNGROUP] */\n\n /* [EXTERNALS] */\n\n /* *BrtName */\n\n /* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\n /* [BrtOleSize] */\n\n /* *(BrtUserBookView *FRT) */\n\n /* [PIVOTCACHEIDS] */\n\n /* [BrtWbFactoid] */\n\n /* [SMARTTAGTYPES] */\n\n /* [BrtWebOpt] */\n\n /* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\n /* [WEBPUBITEMS] */\n\n /* [CRERRS] */\n\n /* FRTWORKBOOK */\n\n write_record(ba, \"BrtEndBook\");\n return ba.end();\n }\n\n function parse_wb(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_wb_bin(data, opts);\n return parse_wb_xml(data, opts);\n }\n\n function parse_ws(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ws_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ws_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_cs(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_cs_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_cs_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_ms(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ms_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ms_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_ds(data, name, idx, opts, rels, wb, themes, styles) {\n if (name.slice(-4) === \".bin\") return parse_ds_bin(data, opts, idx, rels, wb, themes, styles);\n return parse_ds_xml(data, opts, idx, rels, wb, themes, styles);\n }\n\n function parse_sty(data, name, themes, opts) {\n if (name.slice(-4) === \".bin\") return parse_sty_bin(data, themes, opts);\n return parse_sty_xml(data, themes, opts);\n }\n\n function parse_theme(data, name, opts) {\n return parse_theme_xml(data, opts);\n }\n\n function parse_sst(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_sst_bin(data, opts);\n return parse_sst_xml(data, opts);\n }\n\n function parse_cmnt(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_comments_bin(data, opts);\n return parse_comments_xml(data, opts);\n }\n\n function parse_cc(data, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_cc_bin(data, name, opts);\n return parse_cc_xml(data, name, opts);\n }\n\n function parse_xlink(data, rel, name, opts) {\n if (name.slice(-4) === \".bin\") return parse_xlink_bin(data, rel, name, opts);\n return parse_xlink_xml(data, rel, name, opts);\n }\n\n function write_wb(wb, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n }\n\n function write_ws(data, name, opts, wb, rels) {\n return (name.slice(-4) === \".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n } // eslint-disable-next-line no-unused-vars\n\n\n function write_cs(data, name, opts, wb, rels) {\n return (name.slice(-4) === \".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n }\n\n function write_sty(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n }\n\n function write_sst(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n }\n\n function write_cmnt(data, name, opts) {\n return (name.slice(-4) === \".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n }\n /*\n function write_cc(data, name:string, opts) {\n \treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n }\n */\n\n\n var attregexg2 = /([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\n var attregex2 = /([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\n\n function xlml_parsexmltag(tag, skip_root) {\n var words = tag.split(/\\s+/);\n var z = [];\n if (!skip_root) z[0] = words[0];\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n }\n\n function xlml_parsexmltagobj(tag) {\n var words = tag.split(/\\s+/);\n var z = {};\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n } // ----\n\n\n function xlml_format(format, value) {\n var fmt = XLMLFormatMap[format] || unescapexml(format);\n if (fmt === \"General\") return SSF._general(value);\n return SSF.format(fmt, value);\n }\n\n function xlml_set_custprop(Custprops, key, cp, val) {\n var oval = val;\n\n switch ((cp[0].match(/dt:dt=\"([\\w.]+)\"/) || [\"\", \"\"])[1]) {\n case \"boolean\":\n oval = parsexmlbool(val);\n break;\n\n case \"i2\":\n case \"int\":\n oval = parseInt(val, 10);\n break;\n\n case \"r4\":\n case \"float\":\n oval = parseFloat(val);\n break;\n\n case \"date\":\n case \"dateTime.tz\":\n oval = parseDate(val);\n break;\n\n case \"i8\":\n case \"string\":\n case \"fixed\":\n case \"uuid\":\n case \"bin.base64\":\n break;\n\n default:\n throw new Error(\"bad custprop:\" + cp[0]);\n }\n\n Custprops[unescapexml(key)] = oval;\n }\n\n function safe_format_xlml(cell, nf, o) {\n if (cell.t === 'z') return;\n if (!o || o.cellText !== false) try {\n if (cell.t === 'e') {\n cell.w = cell.w || BErr[cell.v];\n } else if (nf === \"General\") {\n if (cell.t === 'n') {\n if ((cell.v | 0) === cell.v) cell.w = SSF._general_int(cell.v);else cell.w = SSF._general_num(cell.v);\n } else cell.w = SSF._general(cell.v);\n } else cell.w = xlml_format(nf || \"General\", cell.v);\n } catch (e) {\n if (o.WTF) throw e;\n }\n\n try {\n var z = XLMLFormatMap[nf] || nf || \"General\";\n if (o.cellNF) cell.z = z;\n\n if (o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n var _d = SSF.parse_date_code(cell.v);\n\n if (_d) {\n cell.t = 'd';\n cell.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n } catch (e) {\n if (o.WTF) throw e;\n }\n }\n\n function process_style_xlml(styles, stag, opts) {\n if (opts.cellStyles) {\n if (stag.Interior) {\n var I = stag.Interior;\n if (I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n }\n }\n\n styles[stag.ID] = stag;\n }\n /* TODO: there must exist some form of OSP-blessed spec */\n\n\n function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {\n var nf = \"General\",\n sid = cell.StyleID,\n S = {};\n o = o || {};\n var interiors = [];\n var i = 0;\n if (sid === undefined && row) sid = row.StyleID;\n if (sid === undefined && csty) sid = csty.StyleID;\n\n while (styles[sid] !== undefined) {\n if (styles[sid].nf) nf = styles[sid].nf;\n if (styles[sid].Interior) interiors.push(styles[sid].Interior);\n if (!styles[sid].Parent) break;\n sid = styles[sid].Parent;\n }\n\n switch (data.Type) {\n case 'Boolean':\n cell.t = 'b';\n cell.v = parsexmlbool(xml);\n break;\n\n case 'String':\n cell.t = 's';\n cell.r = xlml_fixstr(unescapexml(xml));\n cell.v = xml.indexOf(\"<\") > -1 ? unescapexml(ss || xml).replace(/<.*?>/g, \"\") : cell.r; // todo: BR etc\n\n break;\n\n case 'DateTime':\n if (xml.slice(-1) != \"Z\") xml += \"Z\";\n cell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n if (cell.v !== cell.v) cell.v = unescapexml(xml);else if (cell.v < 60) cell.v = cell.v - 1;\n if (!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\n /* falls through */\n\n case 'Number':\n if (cell.v === undefined) cell.v = +xml;\n if (!cell.t) cell.t = 'n';\n break;\n\n case 'Error':\n cell.t = 'e';\n cell.v = RBErr[xml];\n if (o.cellText !== false) cell.w = xml;\n break;\n\n default:\n if (xml == \"\" && ss == \"\") {\n cell.t = 'z';\n } else {\n cell.t = 's';\n cell.v = xlml_fixstr(ss || xml);\n }\n\n break;\n }\n\n safe_format_xlml(cell, nf, o);\n\n if (o.cellFormula !== false) {\n if (cell.Formula) {\n var fstr = unescapexml(cell.Formula);\n /* strictly speaking, the leading = is required but some writers omit */\n\n if (fstr.charCodeAt(0) == 61\n /* = */\n ) fstr = fstr.slice(1);\n cell.f = rc_to_a1(fstr, base);\n delete cell.Formula;\n if (cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);else if (cell.ArrayRange) {\n cell.F = rc_to_a1(cell.ArrayRange, base);\n arrayf.push([safe_decode_range(cell.F), cell.F]);\n }\n } else {\n for (i = 0; i < arrayf.length; ++i) {\n if (base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r) if (base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c) cell.F = arrayf[i][1];\n }\n }\n }\n\n if (o.cellStyles) {\n interiors.forEach(function (x) {\n if (!S.patternType && x.patternType) S.patternType = x.patternType;\n });\n cell.s = S;\n }\n\n if (cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n }\n\n function xlml_clean_comment(comment) {\n comment.t = comment.v || \"\";\n comment.t = comment.t.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n comment.v = comment.w = comment.ixfe = undefined;\n }\n\n function xlml_normalize(d) {\n if (has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\n if (typeof d === 'string') return d;\n /* duktape */\n\n if (typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n throw new Error(\"Bad input format: expected Buffer or string\");\n }\n /* TODO: Everything */\n\n /* UOS uses CJK in tags */\n\n\n var xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg; //var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\n function parse_xlml_xml(d, _opts) {\n var opts = _opts || {};\n make_ssf(SSF);\n var str = debom(xlml_normalize(d));\n\n if (opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n if (typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));else str = utf8read(str);\n }\n\n var opening = str.slice(0, 1024).toLowerCase(),\n ishtml = false;\n if (opening.indexOf(\"= 0) ishtml = true;\n });\n if (ishtml) return HTML_.to_workbook(str, opts);\n var Rn;\n var state = [],\n tmp;\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var sheets = {},\n sheetnames = [],\n cursheet = opts.dense ? [] : {},\n sheetname = \"\";\n var table = {},\n cell = {},\n row = {}; // eslint-disable-line no-unused-vars\n\n var dtag = xlml_parsexmltag(''),\n didx = 0;\n var c = 0,\n r = 0;\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var styles = {},\n stag = {};\n var ss = \"\",\n fidx = 0;\n var merges = [];\n var Props = {},\n Custprops = {},\n pidx = 0,\n cp = [];\n var comments = [],\n comment = {};\n var cstys = [],\n csty,\n seencol = false;\n var arrayf = [];\n var rowinfo = [],\n rowobj = {},\n cc = 0,\n rr = 0;\n var Workbook = {\n Sheets: [],\n WBProps: {\n date1904: false\n }\n },\n wsprops = {};\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\");\n var raw_Rn3 = \"\";\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase()) {\n case 'data'\n /*case 'Data'*/\n :\n if (raw_Rn3 == \"data\") {\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n }\n\n if (state[state.length - 1][1]) break;\n if (Rn[1] === '/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length - 1][0] ==\n /*\"Comment\"*/\n \"comment\" ? comment : cell, {\n c: c,\n r: r\n }, styles, cstys[c], row, arrayf, opts);else {\n ss = \"\";\n dtag = xlml_parsexmltag(Rn[0]);\n didx = Rn.index + Rn[0].length;\n }\n break;\n\n case 'cell'\n /*case 'Cell'*/\n :\n if (Rn[1] === '/') {\n if (comments.length > 0) cell.c = comments;\n\n if ((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n if (opts.dense) {\n if (!cursheet[r]) cursheet[r] = [];\n cursheet[r][c] = cell;\n } else cursheet[encode_col(c) + encode_row(r)] = cell;\n }\n\n if (cell.HRef) {\n cell.l = {\n Target: cell.HRef\n };\n if (cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n delete cell.HRef;\n delete cell.HRefScreenTip;\n }\n\n if (cell.MergeAcross || cell.MergeDown) {\n cc = c + (parseInt(cell.MergeAcross, 10) | 0);\n rr = r + (parseInt(cell.MergeDown, 10) | 0);\n merges.push({\n s: {\n c: c,\n r: r\n },\n e: {\n c: cc,\n r: rr\n }\n });\n }\n\n if (!opts.sheetStubs) {\n if (cell.MergeAcross) c = cc + 1;else ++c;\n } else if (cell.MergeAcross || cell.MergeDown) {\n for (var cma = c; cma <= cc; ++cma) {\n for (var cmd = r; cmd <= rr; ++cmd) {\n if (cma > c || cmd > r) {\n if (opts.dense) {\n if (!cursheet[cmd]) cursheet[cmd] = [];\n cursheet[cmd][cma] = {\n t: 'z'\n };\n } else cursheet[encode_col(cma) + encode_row(cmd)] = {\n t: 'z'\n };\n }\n }\n }\n\n c = cc + 1;\n } else ++c;\n } else {\n cell = xlml_parsexmltagobj(Rn[0]);\n if (cell.Index) c = +cell.Index - 1;\n if (c < refguess.s.c) refguess.s.c = c;\n if (c > refguess.e.c) refguess.e.c = c;\n if (Rn[0].slice(-2) === \"/>\") ++c;\n comments = [];\n }\n\n break;\n\n case 'row'\n /*case 'Row'*/\n :\n if (Rn[1] === '/' || Rn[0].slice(-2) === \"/>\") {\n if (r < refguess.s.r) refguess.s.r = r;\n if (r > refguess.e.r) refguess.e.r = r;\n\n if (Rn[0].slice(-2) === \"/>\") {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n }\n\n c = 0;\n ++r;\n } else {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n rowobj = {};\n\n if (row.AutoFitHeight == \"0\" || row.Height) {\n rowobj.hpx = parseInt(row.Height, 10);\n rowobj.hpt = px2pt(rowobj.hpx);\n rowinfo[r] = rowobj;\n }\n\n if (row.Hidden == \"1\") {\n rowobj.hidden = true;\n rowinfo[r] = rowobj;\n }\n }\n\n break;\n\n case 'worksheet'\n /*case 'Worksheet'*/\n :\n /* TODO: read range from FullRows/FullColumns */\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n sheetnames.push(sheetname);\n\n if (refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n cursheet[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n cursheet[\"!fullref\"] = cursheet[\"!ref\"];\n refguess.e.r = opts.sheetRows - 1;\n cursheet[\"!ref\"] = encode_range(refguess);\n }\n }\n\n if (merges.length) cursheet[\"!merges\"] = merges;\n if (cstys.length > 0) cursheet[\"!cols\"] = cstys;\n if (rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n sheets[sheetname] = cursheet;\n } else {\n refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n r = c = 0;\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n sheetname = unescapexml(tmp.Name);\n cursheet = opts.dense ? [] : {};\n merges = [];\n arrayf = [];\n rowinfo = [];\n wsprops = {\n name: sheetname,\n Hidden: 0\n };\n Workbook.Sheets.push(wsprops);\n }\n\n break;\n\n case 'table'\n /*case 'Table'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].slice(-2) == \"/>\") break;else {\n table = xlml_parsexmltag(Rn[0]);\n state.push([Rn[3], false]);\n cstys = [];\n seencol = false;\n }\n\n break;\n\n case 'style'\n /*case 'Style'*/\n :\n if (Rn[1] === '/') process_style_xlml(styles, stag, opts);else stag = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'numberformat'\n /*case 'NumberFormat'*/\n :\n stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n if (XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\n for (var ssfidx = 0; ssfidx != 0x188; ++ssfidx) {\n if (SSF._table[ssfidx] == stag.nf) break;\n }\n\n if (ssfidx == 0x188) for (ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) {\n if (SSF._table[ssfidx] == null) {\n SSF.load(stag.nf, ssfidx);\n break;\n }\n }\n break;\n\n case 'column'\n /*case 'Column'*/\n :\n if (state[state.length - 1][0] !==\n /*'Table'*/\n 'table') break;\n csty = xlml_parsexmltag(Rn[0]);\n\n if (csty.Hidden) {\n csty.hidden = true;\n delete csty.Hidden;\n }\n\n if (csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\n if (!seencol && csty.wpx > 10) {\n seencol = true;\n MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\n for (var _col = 0; _col < cstys.length; ++_col) {\n if (cstys[_col]) process_col(cstys[_col]);\n }\n }\n\n if (seencol) process_col(csty);\n cstys[csty.Index - 1 || cstys.length] = csty;\n\n for (var i = 0; i < +csty.Span; ++i) {\n cstys[cstys.length] = dup(csty);\n }\n\n break;\n\n case 'namedrange'\n /*case 'NamedRange'*/\n :\n if (Rn[1] === '/') break;\n if (!Workbook.Names) Workbook.Names = [];\n\n var _NamedRange = parsexmltag(Rn[0]);\n\n var _DefinedName = {\n Name: _NamedRange.Name,\n Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {\n r: 0,\n c: 0\n })\n };\n if (Workbook.Sheets.length > 0) _DefinedName.Sheet = Workbook.Sheets.length - 1;\n Workbook.Names.push(_DefinedName);\n break;\n\n case 'namedcell'\n /*case 'NamedCell'*/\n :\n break;\n\n case 'b'\n /*case 'B'*/\n :\n break;\n\n case 'i'\n /*case 'I'*/\n :\n break;\n\n case 'u'\n /*case 'U'*/\n :\n break;\n\n case 's'\n /*case 'S'*/\n :\n break;\n\n case 'em'\n /*case 'EM'*/\n :\n break;\n\n case 'h2'\n /*case 'H2'*/\n :\n break;\n\n case 'h3'\n /*case 'H3'*/\n :\n break;\n\n case 'sub'\n /*case 'Sub'*/\n :\n break;\n\n case 'sup'\n /*case 'Sup'*/\n :\n break;\n\n case 'span'\n /*case 'Span'*/\n :\n break;\n\n case 'alignment'\n /*case 'Alignment'*/\n :\n break;\n\n case 'borders'\n /*case 'Borders'*/\n :\n break;\n\n case 'border'\n /*case 'Border'*/\n :\n break;\n\n case 'font'\n /*case 'Font'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") ss += str.slice(fidx, Rn.index);else fidx = Rn.index + Rn[0].length;\n break;\n\n case 'interior'\n /*case 'Interior'*/\n :\n if (!opts.cellStyles) break;\n stag.Interior = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'protection'\n /*case 'Protection'*/\n :\n break;\n\n case 'author'\n /*case 'Author'*/\n :\n case 'title'\n /*case 'Title'*/\n :\n case 'description'\n /*case 'Description'*/\n :\n case 'created'\n /*case 'Created'*/\n :\n case 'keywords'\n /*case 'Keywords'*/\n :\n case 'subject'\n /*case 'Subject'*/\n :\n case 'category'\n /*case 'Category'*/\n :\n case 'company'\n /*case 'Company'*/\n :\n case 'lastauthor'\n /*case 'LastAuthor'*/\n :\n case 'lastsaved'\n /*case 'LastSaved'*/\n :\n case 'lastprinted'\n /*case 'LastPrinted'*/\n :\n case 'version'\n /*case 'Version'*/\n :\n case 'revision'\n /*case 'Revision'*/\n :\n case 'totaltime'\n /*case 'TotalTime'*/\n :\n case 'hyperlinkbase'\n /*case 'HyperlinkBase'*/\n :\n case 'manager'\n /*case 'Manager'*/\n :\n case 'contentstatus'\n /*case 'ContentStatus'*/\n :\n case 'identifier'\n /*case 'Identifier'*/\n :\n case 'language'\n /*case 'Language'*/\n :\n case 'appname'\n /*case 'AppName'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'paragraphs'\n /*case 'Paragraphs'*/\n :\n break;\n\n case 'styles'\n /*case 'Styles'*/\n :\n case 'workbook'\n /*case 'Workbook'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else state.push([Rn[3], false]);\n\n break;\n\n case 'comment'\n /*case 'Comment'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n xlml_clean_comment(comment);\n comments.push(comment);\n } else {\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n comment = {\n a: tmp.Author\n };\n }\n\n break;\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n var AutoFilter = xlml_parsexmltag(Rn[0]);\n cursheet['!autofilter'] = {\n ref: rc_to_a1(AutoFilter.Range).replace(/\\$/g, \"\")\n };\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'name'\n /*case 'Name'*/\n :\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else {\n if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n }\n\n break;\n\n case 'pixelsperinch'\n /*case 'PixelsPerInch'*/\n :\n break;\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n case 'documentproperties'\n /*case 'DocumentProperties'*/\n :\n case 'customdocumentproperties'\n /*case 'CustomDocumentProperties'*/\n :\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n case 'names'\n /*case 'Names'*/\n :\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n case 'querytable'\n /*case 'QueryTable'*/\n :\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'schema'\n /*case 'Schema'*/\n : //case 'data' /*case 'data'*/:\n\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n case 'smarttagtype'\n /*case 'SmartTagType'*/\n :\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n default:\n /* FODS file root is */\n if (state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n /* UOS file root is */\n\n if (state.length == 0 && Rn[3] == \"uof\"\n /*\"UOF\"*/\n ) return parse_fods(str, opts);\n var seen = true;\n\n switch (state[state.length - 1][0]) {\n /* OfficeDocumentSettings */\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n switch (Rn[3]) {\n case 'allowpng'\n /*case 'AllowPNG'*/\n :\n break;\n\n case 'removepersonalinformation'\n /*case 'RemovePersonalInformation'*/\n :\n break;\n\n case 'downloadcomponents'\n /*case 'DownloadComponents'*/\n :\n break;\n\n case 'locationofcomponents'\n /*case 'LocationOfComponents'*/\n :\n break;\n\n case 'colors'\n /*case 'Colors'*/\n :\n break;\n\n case 'color'\n /*case 'Color'*/\n :\n break;\n\n case 'index'\n /*case 'Index'*/\n :\n break;\n\n case 'rgb'\n /*case 'RGB'*/\n :\n break;\n\n case 'targetscreensize'\n /*case 'TargetScreenSize'*/\n :\n break;\n\n case 'readonlyrecommended'\n /*case 'ReadOnlyRecommended'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ComponentOptions */\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n switch (Rn[3]) {\n case 'toolbar'\n /*case 'Toolbar'*/\n :\n break;\n\n case 'hideofficelogo'\n /*case 'HideOfficeLogo'*/\n :\n break;\n\n case 'spreadsheetautofit'\n /*case 'SpreadsheetAutoFit'*/\n :\n break;\n\n case 'label'\n /*case 'Label'*/\n :\n break;\n\n case 'caption'\n /*case 'Caption'*/\n :\n break;\n\n case 'maxheight'\n /*case 'MaxHeight'*/\n :\n break;\n\n case 'maxwidth'\n /*case 'MaxWidth'*/\n :\n break;\n\n case 'nextsheetnumber'\n /*case 'NextSheetNumber'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ExcelWorkbook */\n\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n switch (Rn[3]) {\n case 'date1904'\n /*case 'Date1904'*/\n :\n Workbook.WBProps.date1904 = true;\n break;\n\n case 'windowheight'\n /*case 'WindowHeight'*/\n :\n break;\n\n case 'windowwidth'\n /*case 'WindowWidth'*/\n :\n break;\n\n case 'windowtopx'\n /*case 'WindowTopX'*/\n :\n break;\n\n case 'windowtopy'\n /*case 'WindowTopY'*/\n :\n break;\n\n case 'tabratio'\n /*case 'TabRatio'*/\n :\n break;\n\n case 'protectstructure'\n /*case 'ProtectStructure'*/\n :\n break;\n\n case 'protectwindow'\n /*case 'ProtectWindow'*/\n :\n break;\n\n case 'protectwindows'\n /*case 'ProtectWindows'*/\n :\n break;\n\n case 'activesheet'\n /*case 'ActiveSheet'*/\n :\n break;\n\n case 'displayinknotes'\n /*case 'DisplayInkNotes'*/\n :\n break;\n\n case 'firstvisiblesheet'\n /*case 'FirstVisibleSheet'*/\n :\n break;\n\n case 'supbook'\n /*case 'SupBook'*/\n :\n break;\n\n case 'sheetname'\n /*case 'SheetName'*/\n :\n break;\n\n case 'sheetindex'\n /*case 'SheetIndex'*/\n :\n break;\n\n case 'sheetindexfirst'\n /*case 'SheetIndexFirst'*/\n :\n break;\n\n case 'sheetindexlast'\n /*case 'SheetIndexLast'*/\n :\n break;\n\n case 'dll'\n /*case 'Dll'*/\n :\n break;\n\n case 'acceptlabelsinformulas'\n /*case 'AcceptLabelsInFormulas'*/\n :\n break;\n\n case 'donotsavelinkvalues'\n /*case 'DoNotSaveLinkValues'*/\n :\n break;\n\n case 'iteration'\n /*case 'Iteration'*/\n :\n break;\n\n case 'maxiterations'\n /*case 'MaxIterations'*/\n :\n break;\n\n case 'maxchange'\n /*case 'MaxChange'*/\n :\n break;\n\n case 'path'\n /*case 'Path'*/\n :\n break;\n\n case 'xct'\n /*case 'Xct'*/\n :\n break;\n\n case 'count'\n /*case 'Count'*/\n :\n break;\n\n case 'selectedsheets'\n /*case 'SelectedSheets'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n case 'uncalced'\n /*case 'Uncalced'*/\n :\n break;\n\n case 'startupprompt'\n /*case 'StartupPrompt'*/\n :\n break;\n\n case 'crn'\n /*case 'Crn'*/\n :\n break;\n\n case 'externname'\n /*case 'ExternName'*/\n :\n break;\n\n case 'formula'\n /*case 'Formula'*/\n :\n break;\n\n case 'colfirst'\n /*case 'ColFirst'*/\n :\n break;\n\n case 'collast'\n /*case 'ColLast'*/\n :\n break;\n\n case 'wantadvise'\n /*case 'WantAdvise'*/\n :\n break;\n\n case 'boolean'\n /*case 'Boolean'*/\n :\n break;\n\n case 'error'\n /*case 'Error'*/\n :\n break;\n\n case 'text'\n /*case 'Text'*/\n :\n break;\n\n case 'ole'\n /*case 'OLE'*/\n :\n break;\n\n case 'noautorecover'\n /*case 'NoAutoRecover'*/\n :\n break;\n\n case 'publishobjects'\n /*case 'PublishObjects'*/\n :\n break;\n\n case 'donotcalculatebeforesave'\n /*case 'DoNotCalculateBeforeSave'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'refmoder1c1'\n /*case 'RefModeR1C1'*/\n :\n break;\n\n case 'embedsavesmarttags'\n /*case 'EmbedSaveSmartTags'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorkbookOptions */\n\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n switch (Rn[3]) {\n case 'owcversion'\n /*case 'OWCVersion'*/\n :\n break;\n\n case 'height'\n /*case 'Height'*/\n :\n break;\n\n case 'width'\n /*case 'Width'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorksheetOptions */\n\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n switch (Rn[3]) {\n case 'visible'\n /*case 'Visible'*/\n :\n if (Rn[0].slice(-2) === \"/>\") {\n /* empty */\n } else if (Rn[1] === \"/\") switch (str.slice(pidx, Rn.index)) {\n case \"SheetHidden\":\n wsprops.Hidden = 1;\n break;\n\n case \"SheetVeryHidden\":\n wsprops.Hidden = 2;\n break;\n } else pidx = Rn.index + Rn[0].length;\n\n break;\n\n case 'header'\n /*case 'Header'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n cursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n break;\n\n case 'footer'\n /*case 'Footer'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n cursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n break;\n\n case 'pagemargins'\n /*case 'PageMargins'*/\n :\n var pagemargins = parsexmltag(Rn[0]);\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n if (pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n if (pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n if (pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n if (pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n break;\n\n case 'displayrighttoleft'\n /*case 'DisplayRightToLeft'*/\n :\n if (!Workbook.Views) Workbook.Views = [];\n if (!Workbook.Views[0]) Workbook.Views[0] = {};\n Workbook.Views[0].RTL = true;\n break;\n\n case 'freezepanes'\n /*case 'FreezePanes'*/\n :\n break;\n\n case 'frozennosplit'\n /*case 'FrozenNoSplit'*/\n :\n break;\n\n case 'splithorizontal'\n /*case 'SplitHorizontal'*/\n :\n case 'splitvertical'\n /*case 'SplitVertical'*/\n :\n break;\n\n case 'donotdisplaygridlines'\n /*case 'DoNotDisplayGridlines'*/\n :\n break;\n\n case 'activerow'\n /*case 'ActiveRow'*/\n :\n break;\n\n case 'activecol'\n /*case 'ActiveCol'*/\n :\n break;\n\n case 'toprowbottompane'\n /*case 'TopRowBottomPane'*/\n :\n break;\n\n case 'leftcolumnrightpane'\n /*case 'LeftColumnRightPane'*/\n :\n break;\n\n case 'unsynced'\n /*case 'Unsynced'*/\n :\n break;\n\n case 'print'\n /*case 'Print'*/\n :\n break;\n\n case 'panes'\n /*case 'Panes'*/\n :\n break;\n\n case 'scale'\n /*case 'Scale'*/\n :\n break;\n\n case 'pane'\n /*case 'Pane'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'layout'\n /*case 'Layout'*/\n :\n break;\n\n case 'pagesetup'\n /*case 'PageSetup'*/\n :\n break;\n\n case 'selected'\n /*case 'Selected'*/\n :\n break;\n\n case 'protectobjects'\n /*case 'ProtectObjects'*/\n :\n break;\n\n case 'enableselection'\n /*case 'EnableSelection'*/\n :\n break;\n\n case 'protectscenarios'\n /*case 'ProtectScenarios'*/\n :\n break;\n\n case 'validprinterinfo'\n /*case 'ValidPrinterInfo'*/\n :\n break;\n\n case 'horizontalresolution'\n /*case 'HorizontalResolution'*/\n :\n break;\n\n case 'verticalresolution'\n /*case 'VerticalResolution'*/\n :\n break;\n\n case 'numberofcopies'\n /*case 'NumberofCopies'*/\n :\n break;\n\n case 'activepane'\n /*case 'ActivePane'*/\n :\n break;\n\n case 'toprowvisible'\n /*case 'TopRowVisible'*/\n :\n break;\n\n case 'leftcolumnvisible'\n /*case 'LeftColumnVisible'*/\n :\n break;\n\n case 'fittopage'\n /*case 'FitToPage'*/\n :\n break;\n\n case 'rangeselection'\n /*case 'RangeSelection'*/\n :\n break;\n\n case 'papersizeindex'\n /*case 'PaperSizeIndex'*/\n :\n break;\n\n case 'pagelayoutzoom'\n /*case 'PageLayoutZoom'*/\n :\n break;\n\n case 'pagebreakzoom'\n /*case 'PageBreakZoom'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'fitwidth'\n /*case 'FitWidth'*/\n :\n break;\n\n case 'fitheight'\n /*case 'FitHeight'*/\n :\n break;\n\n case 'commentslayout'\n /*case 'CommentsLayout'*/\n :\n break;\n\n case 'zoom'\n /*case 'Zoom'*/\n :\n break;\n\n case 'lefttoright'\n /*case 'LeftToRight'*/\n :\n break;\n\n case 'gridlines'\n /*case 'Gridlines'*/\n :\n break;\n\n case 'allowsort'\n /*case 'AllowSort'*/\n :\n break;\n\n case 'allowfilter'\n /*case 'AllowFilter'*/\n :\n break;\n\n case 'allowinsertrows'\n /*case 'AllowInsertRows'*/\n :\n break;\n\n case 'allowdeleterows'\n /*case 'AllowDeleteRows'*/\n :\n break;\n\n case 'allowinsertcols'\n /*case 'AllowInsertCols'*/\n :\n break;\n\n case 'allowdeletecols'\n /*case 'AllowDeleteCols'*/\n :\n break;\n\n case 'allowinserthyperlinks'\n /*case 'AllowInsertHyperlinks'*/\n :\n break;\n\n case 'allowformatcells'\n /*case 'AllowFormatCells'*/\n :\n break;\n\n case 'allowsizecols'\n /*case 'AllowSizeCols'*/\n :\n break;\n\n case 'allowsizerows'\n /*case 'AllowSizeRows'*/\n :\n break;\n\n case 'nosummaryrowsbelowdetail'\n /*case 'NoSummaryRowsBelowDetail'*/\n :\n break;\n\n case 'tabcolorindex'\n /*case 'TabColorIndex'*/\n :\n break;\n\n case 'donotdisplayheadings'\n /*case 'DoNotDisplayHeadings'*/\n :\n break;\n\n case 'showpagelayoutzoom'\n /*case 'ShowPageLayoutZoom'*/\n :\n break;\n\n case 'nosummarycolumnsrightdetail'\n /*case 'NoSummaryColumnsRightDetail'*/\n :\n break;\n\n case 'blackandwhite'\n /*case 'BlackAndWhite'*/\n :\n break;\n\n case 'donotdisplayzeros'\n /*case 'DoNotDisplayZeros'*/\n :\n break;\n\n case 'displaypagebreak'\n /*case 'DisplayPageBreak'*/\n :\n break;\n\n case 'rowcolheadings'\n /*case 'RowColHeadings'*/\n :\n break;\n\n case 'donotdisplayoutline'\n /*case 'DoNotDisplayOutline'*/\n :\n break;\n\n case 'noorientation'\n /*case 'NoOrientation'*/\n :\n break;\n\n case 'allowusepivottables'\n /*case 'AllowUsePivotTables'*/\n :\n break;\n\n case 'zeroheight'\n /*case 'ZeroHeight'*/\n :\n break;\n\n case 'viewablerange'\n /*case 'ViewableRange'*/\n :\n break;\n\n case 'selection'\n /*case 'Selection'*/\n :\n break;\n\n case 'protectcontents'\n /*case 'ProtectContents'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PivotTable */\n\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n switch (Rn[3]) {\n case 'immediateitemsondrop'\n /*case 'ImmediateItemsOnDrop'*/\n :\n break;\n\n case 'showpagemultipleitemlabel'\n /*case 'ShowPageMultipleItemLabel'*/\n :\n break;\n\n case 'compactrowindent'\n /*case 'CompactRowIndent'*/\n :\n break;\n\n case 'location'\n /*case 'Location'*/\n :\n break;\n\n case 'pivotfield'\n /*case 'PivotField'*/\n :\n break;\n\n case 'orientation'\n /*case 'Orientation'*/\n :\n break;\n\n case 'layoutform'\n /*case 'LayoutForm'*/\n :\n break;\n\n case 'layoutsubtotallocation'\n /*case 'LayoutSubtotalLocation'*/\n :\n break;\n\n case 'layoutcompactrow'\n /*case 'LayoutCompactRow'*/\n :\n break;\n\n case 'position'\n /*case 'Position'*/\n :\n break;\n\n case 'pivotitem'\n /*case 'PivotItem'*/\n :\n break;\n\n case 'datatype'\n /*case 'DataType'*/\n :\n break;\n\n case 'datafield'\n /*case 'DataField'*/\n :\n break;\n\n case 'sourcename'\n /*case 'SourceName'*/\n :\n break;\n\n case 'parentfield'\n /*case 'ParentField'*/\n :\n break;\n\n case 'ptlineitems'\n /*case 'PTLineItems'*/\n :\n break;\n\n case 'ptlineitem'\n /*case 'PTLineItem'*/\n :\n break;\n\n case 'countofsameitems'\n /*case 'CountOfSameItems'*/\n :\n break;\n\n case 'item'\n /*case 'Item'*/\n :\n break;\n\n case 'itemtype'\n /*case 'ItemType'*/\n :\n break;\n\n case 'ptsource'\n /*case 'PTSource'*/\n :\n break;\n\n case 'cacheindex'\n /*case 'CacheIndex'*/\n :\n break;\n\n case 'consolidationreference'\n /*case 'ConsolidationReference'*/\n :\n break;\n\n case 'filename'\n /*case 'FileName'*/\n :\n break;\n\n case 'reference'\n /*case 'Reference'*/\n :\n break;\n\n case 'nocolumngrand'\n /*case 'NoColumnGrand'*/\n :\n break;\n\n case 'norowgrand'\n /*case 'NoRowGrand'*/\n :\n break;\n\n case 'blanklineafteritems'\n /*case 'BlankLineAfterItems'*/\n :\n break;\n\n case 'hidden'\n /*case 'Hidden'*/\n :\n break;\n\n case 'subtotal'\n /*case 'Subtotal'*/\n :\n break;\n\n case 'basefield'\n /*case 'BaseField'*/\n :\n break;\n\n case 'mapchilditems'\n /*case 'MapChildItems'*/\n :\n break;\n\n case 'function'\n /*case 'Function'*/\n :\n break;\n\n case 'refreshonfileopen'\n /*case 'RefreshOnFileOpen'*/\n :\n break;\n\n case 'printsettitles'\n /*case 'PrintSetTitles'*/\n :\n break;\n\n case 'mergelabels'\n /*case 'MergeLabels'*/\n :\n break;\n\n case 'defaultversion'\n /*case 'DefaultVersion'*/\n :\n break;\n\n case 'refreshname'\n /*case 'RefreshName'*/\n :\n break;\n\n case 'refreshdate'\n /*case 'RefreshDate'*/\n :\n break;\n\n case 'refreshdatecopy'\n /*case 'RefreshDateCopy'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n case 'versionlastupdate'\n /*case 'VersionLastUpdate'*/\n :\n break;\n\n case 'versionupdateablemin'\n /*case 'VersionUpdateableMin'*/\n :\n break;\n\n case 'versionrefreshablemin'\n /*case 'VersionRefreshableMin'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PageBreaks */\n\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n switch (Rn[3]) {\n case 'colbreaks'\n /*case 'ColBreaks'*/\n :\n break;\n\n case 'colbreak'\n /*case 'ColBreak'*/\n :\n break;\n\n case 'rowbreaks'\n /*case 'RowBreaks'*/\n :\n break;\n\n case 'rowbreak'\n /*case 'RowBreak'*/\n :\n break;\n\n case 'colstart'\n /*case 'ColStart'*/\n :\n break;\n\n case 'colend'\n /*case 'ColEnd'*/\n :\n break;\n\n case 'rowend'\n /*case 'RowEnd'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* AutoFilter */\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n switch (Rn[3]) {\n case 'autofiltercolumn'\n /*case 'AutoFilterColumn'*/\n :\n break;\n\n case 'autofiltercondition'\n /*case 'AutoFilterCondition'*/\n :\n break;\n\n case 'autofilterand'\n /*case 'AutoFilterAnd'*/\n :\n break;\n\n case 'autofilteror'\n /*case 'AutoFilterOr'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* QueryTable */\n\n case 'querytable'\n /*case 'QueryTable'*/\n :\n switch (Rn[3]) {\n case 'id'\n /*case 'Id'*/\n :\n break;\n\n case 'autoformatfont'\n /*case 'AutoFormatFont'*/\n :\n break;\n\n case 'autoformatpattern'\n /*case 'AutoFormatPattern'*/\n :\n break;\n\n case 'querysource'\n /*case 'QuerySource'*/\n :\n break;\n\n case 'querytype'\n /*case 'QueryType'*/\n :\n break;\n\n case 'enableredirections'\n /*case 'EnableRedirections'*/\n :\n break;\n\n case 'refreshedinxl9'\n /*case 'RefreshedInXl9'*/\n :\n break;\n\n case 'urlstring'\n /*case 'URLString'*/\n :\n break;\n\n case 'htmltables'\n /*case 'HTMLTables'*/\n :\n break;\n\n case 'connection'\n /*case 'Connection'*/\n :\n break;\n\n case 'commandtext'\n /*case 'CommandText'*/\n :\n break;\n\n case 'refreshinfo'\n /*case 'RefreshInfo'*/\n :\n break;\n\n case 'notitles'\n /*case 'NoTitles'*/\n :\n break;\n\n case 'nextid'\n /*case 'NextId'*/\n :\n break;\n\n case 'columninfo'\n /*case 'ColumnInfo'*/\n :\n break;\n\n case 'overwritecells'\n /*case 'OverwriteCells'*/\n :\n break;\n\n case 'donotpromptforfile'\n /*case 'DoNotPromptForFile'*/\n :\n break;\n\n case 'textwizardsettings'\n /*case 'TextWizardSettings'*/\n :\n break;\n\n case 'source'\n /*case 'Source'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'decimal'\n /*case 'Decimal'*/\n :\n break;\n\n case 'thousandseparator'\n /*case 'ThousandSeparator'*/\n :\n break;\n\n case 'trailingminusnumbers'\n /*case 'TrailingMinusNumbers'*/\n :\n break;\n\n case 'formatsettings'\n /*case 'FormatSettings'*/\n :\n break;\n\n case 'fieldtype'\n /*case 'FieldType'*/\n :\n break;\n\n case 'delimiters'\n /*case 'Delimiters'*/\n :\n break;\n\n case 'tab'\n /*case 'Tab'*/\n :\n break;\n\n case 'comma'\n /*case 'Comma'*/\n :\n break;\n\n case 'autoformatname'\n /*case 'AutoFormatName'*/\n :\n break;\n\n case 'versionlastedit'\n /*case 'VersionLastEdit'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* MapInfo (schema) */\n\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'schema'\n /*case 'Schema'*/\n :\n case 'data'\n /*case 'data'*/\n :\n switch (Rn[3]) {\n case 'map'\n /*case 'Map'*/\n :\n break;\n\n case 'entry'\n /*case 'Entry'*/\n :\n break;\n\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'xpath'\n /*case 'XPath'*/\n :\n break;\n\n case 'field'\n /*case 'Field'*/\n :\n break;\n\n case 'xsdtype'\n /*case 'XSDType'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'aggregate'\n /*case 'Aggregate'*/\n :\n break;\n\n case 'elementtype'\n /*case 'ElementType'*/\n :\n break;\n\n case 'attributetype'\n /*case 'AttributeType'*/\n :\n break;\n\n /* These are from xsd (XML Schema Definition) */\n\n case 'schema'\n /*case 'schema'*/\n :\n case 'element'\n /*case 'element'*/\n :\n case 'complextype'\n /*case 'complexType'*/\n :\n case 'datatype'\n /*case 'datatype'*/\n :\n case 'all'\n /*case 'all'*/\n :\n case 'attribute'\n /*case 'attribute'*/\n :\n case 'extends'\n /*case 'extends'*/\n :\n break;\n\n case 'row'\n /*case 'row'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* SmartTags (can be anything) */\n\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n break;\n\n default:\n seen = false;\n break;\n }\n\n if (seen) break;\n /* CustomDocumentProperties */\n\n if (Rn[3].match(/!\\[CDATA/)) break;\n if (!state[state.length - 1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\n if (state[state.length - 1][0] ===\n /*'CustomDocumentProperties'*/\n 'customdocumentproperties') {\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));else {\n cp = Rn;\n pidx = Rn.index + Rn[0].length;\n }\n break;\n }\n\n if (opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n }\n }\n\n var out = {};\n if (!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n out.SheetNames = sheetnames;\n out.Workbook = Workbook;\n out.SSF = SSF.get_table();\n out.Props = Props;\n out.Custprops = Custprops;\n return out;\n }\n\n function parse_xlml(data, opts) {\n fix_read_opts(opts = opts || {});\n\n switch (opts.type || \"base64\") {\n case \"base64\":\n return parse_xlml_xml(Base64.decode(data), opts);\n\n case \"binary\":\n case \"buffer\":\n case \"file\":\n return parse_xlml_xml(data, opts);\n\n case \"array\":\n return parse_xlml_xml(a2s(data), opts);\n }\n }\n /* TODO */\n\n\n function write_props_xlml(wb, opts) {\n var o = [];\n /* DocumentProperties */\n\n if (wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n /* CustomDocumentProperties */\n\n if (wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n return o.join(\"\");\n }\n /* TODO */\n\n\n function write_wb_xlml() {\n /* OfficeDocumentSettings */\n\n /* ExcelWorkbook */\n return \"\";\n }\n /* TODO */\n\n\n function write_sty_xlml(wb, opts) {\n /* Styles */\n var styles = [''];\n opts.cellXfs.forEach(function (xf, id) {\n var payload = [];\n payload.push(writextag('NumberFormat', null, {\n \"ss:Format\": escapexml(SSF._table[xf.numFmtId])\n }));\n var o = {\n \"ss:ID\": \"s\" + (21 + id)\n };\n styles.push(writextag('Style', payload.join(\"\"), o));\n });\n return writextag(\"Styles\", styles.join(\"\"));\n }\n\n function write_name_xlml(n) {\n return writextag(\"NamedRange\", null, {\n \"ss:Name\": n.Name,\n \"ss:RefersTo\": \"=\" + a1_to_rc(n.Ref, {\n r: 0,\n c: 0\n })\n });\n }\n\n function write_names_xlml(wb) {\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n var names = wb.Workbook.Names;\n var out = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != null) continue;\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return writextag(\"Names\", out.join(\"\"));\n }\n\n function write_ws_xlml_names(ws, opts, idx, wb) {\n if (!ws) return \"\";\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n var names = wb.Workbook.Names;\n var out = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != idx) continue;\n /*switch(n.Name) {\n \tcase \"_\": continue;\n }*/\n\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return out.join(\"\");\n }\n /* WorksheetOptions */\n\n\n function write_ws_xlml_wsopts(ws, opts, idx, wb) {\n if (!ws) return \"\";\n var o = [];\n /* NOTE: spec technically allows any order, but stick with implied order */\n\n /* FitToPage */\n\n /* DoNotDisplayColHeaders */\n\n /* DoNotDisplayRowHeaders */\n\n /* ViewableRange */\n\n /* Selection */\n\n /* GridlineColor */\n\n /* Name */\n\n /* ExcelWorksheetType */\n\n /* IntlMacro */\n\n /* Unsynced */\n\n /* Selected */\n\n /* CodeName */\n\n if (ws['!margins']) {\n o.push(\"\");\n if (ws['!margins'].header) o.push(writextag(\"Header\", null, {\n 'x:Margin': ws['!margins'].header\n }));\n if (ws['!margins'].footer) o.push(writextag(\"Footer\", null, {\n 'x:Margin': ws['!margins'].footer\n }));\n o.push(writextag(\"PageMargins\", null, {\n 'x:Bottom': ws['!margins'].bottom || \"0.75\",\n 'x:Left': ws['!margins'].left || \"0.7\",\n 'x:Right': ws['!margins'].right || \"0.7\",\n 'x:Top': ws['!margins'].top || \"0.75\"\n }));\n o.push(\"\");\n }\n /* PageSetup */\n\n /* DisplayPageBreak */\n\n /* TransitionExpressionEvaluation */\n\n /* TransitionFormulaEntry */\n\n /* Print */\n\n /* Zoom */\n\n /* PageLayoutZoom */\n\n /* PageBreakZoom */\n\n /* ShowPageBreakZoom */\n\n /* DefaultRowHeight */\n\n /* DefaultColumnWidth */\n\n /* StandardWidth */\n\n\n if (wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n /* Visible */\n if (wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\", {}));else {\n /* Selected */\n for (var i = 0; i < idx; ++i) {\n if (wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n }\n\n if (i == idx) o.push(\"\");\n }\n }\n /* LeftColumnVisible */\n\n\n if (((((wb || {}).Workbook || {}).Views || [])[0] || {}).RTL) o.push(\"\");\n /* GridlineColorIndex */\n\n /* DisplayFormulas */\n\n /* DoNotDisplayGridlines */\n\n /* DoNotDisplayHeadings */\n\n /* DoNotDisplayOutline */\n\n /* ApplyAutomaticOutlineStyles */\n\n /* NoSummaryRowsBelowDetail */\n\n /* NoSummaryColumnsRightDetail */\n\n /* DoNotDisplayZeros */\n\n /* ActiveRow */\n\n /* ActiveColumn */\n\n /* FilterOn */\n\n /* RangeSelection */\n\n /* TopRowVisible */\n\n /* TopRowBottomPane */\n\n /* LeftColumnRightPane */\n\n /* ActivePane */\n\n /* SplitHorizontal */\n\n /* SplitVertical */\n\n /* FreezePanes */\n\n /* FrozenNoSplit */\n\n /* TabColorIndex */\n\n /* Panes */\n\n /* NOTE: Password not supported in XLML Format */\n\n if (ws['!protect']) {\n o.push(writetag(\"ProtectContents\", \"True\"));\n if (ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n if (ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n if (ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));else if (ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n [[\"formatCells\", \"AllowFormatCells\"], [\"formatColumns\", \"AllowSizeCols\"], [\"formatRows\", \"AllowSizeRows\"], [\"insertColumns\", \"AllowInsertCols\"], [\"insertRows\", \"AllowInsertRows\"], [\"insertHyperlinks\", \"AllowInsertHyperlinks\"], [\"deleteColumns\", \"AllowDeleteCols\"], [\"deleteRows\", \"AllowDeleteRows\"], [\"sort\", \"AllowSort\"], [\"autoFilter\", \"AllowFilter\"], [\"pivotTables\", \"AllowUsePivotTables\"]].forEach(function (x) {\n if (ws['!protect'][x[0]]) o.push(\"<\" + x[1] + \"/>\");\n });\n }\n\n if (o.length == 0) return \"\";\n return writextag(\"WorksheetOptions\", o.join(\"\"), {\n xmlns: XLMLNS.x\n });\n }\n\n function write_ws_xlml_comment(comments) {\n return comments.map(function (c) {\n // TODO: formatted text\n var t = xlml_unfixstr(c.t || \"\");\n var d = writextag(\"ss:Data\", t, {\n \"xmlns\": \"http://www.w3.org/TR/REC-html40\"\n });\n return writextag(\"Comment\", d, {\n \"ss:Author\": c.a\n });\n }).join(\"\");\n }\n\n function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr) {\n if (!cell || cell.v == undefined && cell.f == undefined) return \"\";\n var attr = {};\n if (cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\n if (cell.F && cell.F.slice(0, ref.length) == ref) {\n var end = decode_cell(cell.F.slice(ref.length + 1));\n attr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n }\n\n if (cell.l && cell.l.Target) {\n attr[\"ss:HRef\"] = escapexml(cell.l.Target);\n if (cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n }\n\n if (ws['!merges']) {\n var marr = ws['!merges'];\n\n for (var mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n if (marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n if (marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n }\n }\n\n var t = \"\",\n p = \"\";\n\n switch (cell.t) {\n case 'z':\n if (!opts.sheetStubs) return \"\";\n break;\n\n case 'n':\n t = 'Number';\n p = String(cell.v);\n break;\n\n case 'b':\n t = 'Boolean';\n p = cell.v ? \"1\" : \"0\";\n break;\n\n case 'e':\n t = 'Error';\n p = BErr[cell.v];\n break;\n\n case 'd':\n t = 'DateTime';\n p = new Date(cell.v).toISOString();\n if (cell.z == null) cell.z = cell.z || SSF._table[14];\n break;\n\n case 's':\n t = 'String';\n p = escapexlml(cell.v || \"\");\n break;\n }\n /* TODO: cell style */\n\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n attr[\"ss:StyleID\"] = \"s\" + (21 + os);\n attr[\"ss:Index\"] = addr.c + 1;\n\n var _v = cell.v != null ? p : \"\";\n\n var m = cell.t == 'z' ? \"\" : '' + _v + '';\n if ((cell.c || []).length > 0) m += write_ws_xlml_comment(cell.c);\n return writextag(\"Cell\", m, attr);\n }\n\n function write_ws_xlml_row(R, row) {\n var o = '';\n }\n /* TODO */\n\n\n function write_ws_xlml_table(ws, opts, idx, wb) {\n if (!ws['!ref']) return \"\";\n var range = safe_decode_range(ws['!ref']);\n var marr = ws['!merges'] || [],\n mi = 0;\n var o = [];\n if (ws['!cols']) ws['!cols'].forEach(function (n, i) {\n process_col(n);\n var w = !!n.width;\n var p = col_obj_w(i, n);\n var k = {\n \"ss:Index\": i + 1\n };\n if (w) k['ss:Width'] = width2px(p.width);\n if (n.hidden) k['ss:Hidden'] = \"1\";\n o.push(writextag(\"Column\", null, k));\n });\n var dense = Array.isArray(ws);\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n var row = [write_ws_xlml_row(R, (ws['!rows'] || [])[R])];\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n var skip = false;\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n break;\n }\n\n if (skip) continue;\n var addr = {\n r: R,\n c: C\n };\n var ref = encode_cell(addr),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n }\n\n row.push(\"
\");\n if (row.length > 2) o.push(row.join(\"\"));\n }\n\n return o.join(\"\");\n }\n\n function write_ws_xlml(idx, opts, wb) {\n var o = [];\n var s = wb.SheetNames[idx];\n var ws = wb.Sheets[s];\n var t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"\" + t + \"\");\n /* Table */\n\n t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"\");\n /* WorksheetOptions */\n\n o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n return o.join(\"\");\n }\n\n function write_xlml(wb, opts) {\n if (!opts) opts = {};\n if (!wb.SSF) wb.SSF = SSF.get_table();\n\n if (wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n }\n\n var d = [];\n d.push(write_props_xlml(wb, opts));\n d.push(write_wb_xlml(wb, opts));\n d.push(\"\");\n d.push(\"\");\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n d.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\n \"ss:Name\": escapexml(wb.SheetNames[i])\n }));\n }\n\n d[2] = write_sty_xlml(wb, opts);\n d[3] = write_names_xlml(wb, opts);\n return XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n 'xmlns': XLMLNS.ss,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:ss': XLMLNS.ss,\n 'xmlns:dt': XLMLNS.dt,\n 'xmlns:html': XLMLNS.html\n });\n }\n /* [MS-OLEDS] 2.3.8 CompObjStream */\n\n\n function parse_compobj(obj) {\n var v = {};\n var o = obj.content;\n /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\n o.l = 28;\n v.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n if (o.length - o.l <= 4) return v;\n var m = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n if (o.length - o.l <= 4) return v;\n m = o.read_shift(4);\n if (m !== 0x71b239f4) return v;\n v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n m = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved2 = o.read_shift(0, \"lpwstr\");\n }\n /*\n \tContinue logic for:\n \t- 2.4.58 Continue\n \t- 2.4.59 ContinueBigName\n \t- 2.4.60 ContinueFrt\n \t- 2.4.61 ContinueFrt11\n \t- 2.4.62 ContinueFrt12\n */\n\n\n function slurp(R, blob, length, opts) {\n var l = length;\n var bufs = [];\n var d = blob.slice(blob.l, blob.l + l);\n if (opts && opts.enc && opts.enc.insitu) switch (R.n) {\n case 'BOF':\n case 'FilePass':\n case 'FileLock':\n case 'InterfaceHdr':\n case 'RRDInfo':\n case 'RRDHead':\n case 'UsrExcl':\n break;\n\n default:\n if (d.length === 0) break;\n opts.enc.insitu(d);\n }\n bufs.push(d);\n blob.l += l;\n\n var next = XLSRecordEnum[__readUInt16LE(blob, blob.l)];\n\n var start = 0;\n\n while (next != null && next.n.slice(0, 8) === 'Continue') {\n l = __readUInt16LE(blob, blob.l + 2);\n start = blob.l + 4;\n if (next.n == 'ContinueFrt') start += 4;else if (next.n.slice(0, 11) == 'ContinueFrt') start += 12;\n bufs.push(blob.slice(start, blob.l + 4 + l));\n blob.l += 4 + l;\n next = XLSRecordEnum[__readUInt16LE(blob, blob.l)];\n }\n\n var b = bconcat(bufs);\n prep_blob(b, 0);\n var ll = 0;\n b.lens = [];\n\n for (var j = 0; j < bufs.length; ++j) {\n b.lens.push(ll);\n ll += bufs[j].length;\n }\n\n return R.f(b, b.length, opts);\n }\n\n function safe_format_xf(p, opts, date1904) {\n if (p.t === 'z') return;\n if (!p.XF) return;\n var fmtid = 0;\n\n try {\n fmtid = p.z || p.XF.numFmtId || 0;\n if (opts.cellNF) p.z = SSF._table[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (!opts || opts.cellText !== false) try {\n if (p.t === 'e') {\n p.w = p.w || BErr[p.v];\n } else if (fmtid === 0 || fmtid == \"General\") {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = SSF._general_int(p.v);else p.w = SSF._general_num(p.v);\n } else p.w = SSF._general(p.v);\n } else p.w = SSF.format(fmtid, p.v, {\n date1904: !!date1904\n });\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n var _d = SSF.parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n }\n\n function make_cell(val, ixfe, t) {\n return {\n v: val,\n ixfe: ixfe,\n t: t\n };\n } // 2.3.2\n\n\n function parse_workbook(blob, options) {\n var wb = {\n opts: {}\n };\n var Sheets = {};\n if (DENSE != null && options.dense == null) options.dense = DENSE;\n var out = options.dense ? [] : {};\n var Directory = {};\n var range = {};\n var last_formula = null;\n var sst = [];\n var cur_sheet = \"\";\n var Preamble = {};\n var lastcell,\n last_cell = \"\",\n cc,\n cmnt,\n rngC,\n rngR;\n var sharedf = {};\n var arrayf = [];\n var temp_val;\n var country;\n var cell_valid = true;\n var XFs = [];\n /* XF records */\n\n var palette = [];\n var Workbook = {\n Sheets: [],\n WBProps: {\n date1904: false\n },\n Views: [{}]\n },\n wsprops = {};\n\n var get_rgb = function getrgb(icv) {\n if (icv < 8) return XLSIcv[icv];\n if (icv < 64) return palette[icv - 8] || XLSIcv[icv];\n return XLSIcv[icv];\n };\n\n var process_cell_style = function pcs(cell, line, options) {\n var xfd = line.XF.data;\n if (!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n line.s = {};\n line.s.patternType = xfd.patternType;\n var t;\n\n if (t = rgb2Hex(get_rgb(xfd.icvFore))) {\n line.s.fgColor = {\n rgb: t\n };\n }\n\n if (t = rgb2Hex(get_rgb(xfd.icvBack))) {\n line.s.bgColor = {\n rgb: t\n };\n }\n };\n\n var addcell = function addcell(cell, line, options) {\n if (file_depth > 1) return;\n if (options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n if (!cell_valid) return;\n if (options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n delete line.ixfe;\n delete line.XF;\n lastcell = cell;\n last_cell = encode_cell(cell);\n if (!range || !range.s || !range.e) range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n if (cell.r < range.s.r) range.s.r = cell.r;\n if (cell.c < range.s.c) range.s.c = cell.c;\n if (cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n if (cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\n if (options.cellFormula && line.f) {\n for (var afi = 0; afi < arrayf.length; ++afi) {\n if (arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n if (arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n line.F = encode_range(arrayf[afi][0]);\n if (arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n if (line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n break;\n }\n }\n\n {\n if (options.dense) {\n if (!out[cell.r]) out[cell.r] = [];\n out[cell.r][cell.c] = line;\n } else out[last_cell] = line;\n }\n };\n\n var opts = {\n enc: false,\n // encrypted\n sbcch: 0,\n // cch in the preceding SupBook\n snames: [],\n // sheetnames\n sharedf: sharedf,\n // shared formulae by address\n arrayf: arrayf,\n // array formulae array\n rrtabid: [],\n // RRTabId\n lastuser: \"\",\n // Last User from WriteAccess\n biff: 8,\n // BIFF version\n codepage: 0,\n // CP from CodePage record\n winlocked: 0,\n // fLockWn from WinProtect\n cellStyles: !!options && !!options.cellStyles,\n WTF: !!options && !!options.wtf\n };\n if (options.password) opts.password = options.password;\n var themes;\n var merges = [];\n var objects = [];\n var colinfo = [],\n rowinfo = []; // eslint-disable-next-line no-unused-vars\n\n var defwidth = 0,\n defheight = 0; // twips / MDW respectively\n\n var seencol = false;\n var supbooks = []; // 1-indexed, will hold extern names\n\n supbooks.SheetNames = opts.snames;\n supbooks.sharedf = opts.sharedf;\n supbooks.arrayf = opts.arrayf;\n supbooks.names = [];\n supbooks.XTI = [];\n var last_Rn = '';\n var file_depth = 0;\n /* TODO: make a real stack */\n\n var BIFF2Fmt = 0,\n BIFF2FmtTable = [];\n var FilterDatabases = [];\n /* TODO: sort out supbooks and process elsewhere */\n\n var last_lbl;\n /* explicit override for some broken writers */\n\n opts.codepage = 1200;\n set_cp(1200);\n var seen_codepage = false;\n\n while (blob.l < blob.length - 1) {\n var s = blob.l;\n var RecordType = blob.read_shift(2);\n if (RecordType === 0 && last_Rn === 'EOF') break;\n var length = blob.l === blob.length ? 0 : blob.read_shift(2);\n var R = XLSRecordEnum[RecordType]; //console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n //if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\n if (R && R.f) {\n if (options.bookSheets) {\n if (last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n }\n\n last_Rn = R.n;\n\n if (R.r === 2 || R.r == 12) {\n var rt = blob.read_shift(2);\n length -= 2;\n if (!opts.enc && rt !== RecordType && ((rt & 0xFF) << 8 | rt >> 8) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\n if (R.r == 12) {\n blob.l += 10;\n length -= 10;\n } // skip FRT\n\n } //console.error(R,blob.l,length,blob.length);\n\n\n var val = {};\n if (R.n === 'EOF') val = R.f(blob, length, opts);else val = slurp(R, blob, length, opts);\n var Rn = R.n;\n if (file_depth == 0 && Rn != 'BOF') continue;\n /* nested switch statements to workaround V8 128 limit */\n\n switch (Rn) {\n /* Workbook Options */\n case 'Date1904':\n wb.opts.Date1904 = Workbook.WBProps.date1904 = val;\n break;\n\n case 'WriteProtect':\n wb.opts.WriteProtect = true;\n break;\n\n case 'FilePass':\n if (!opts.enc) blob.l = 0;\n opts.enc = val;\n if (!options.password) throw new Error(\"File is password-protected\");\n if (val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n if (!val.valid) throw new Error(\"Password is incorrect\");\n break;\n\n case 'WriteAccess':\n opts.lastuser = val;\n break;\n\n case 'FileSharing':\n break;\n //TODO\n\n case 'CodePage':\n var cpval = Number(val);\n /* overrides based on test cases */\n\n switch (cpval) {\n case 0x5212:\n cpval = 1200;\n break;\n\n case 0x8000:\n cpval = 10000;\n break;\n\n case 0x8001:\n cpval = 1252;\n break;\n }\n\n set_cp(opts.codepage = cpval);\n seen_codepage = true;\n break;\n\n case 'RRTabId':\n opts.rrtabid = val;\n break;\n\n case 'WinProtect':\n opts.winlocked = val;\n break;\n\n case 'Template':\n break;\n // TODO\n\n case 'BookBool':\n break;\n // TODO\n\n case 'UsesELFs':\n break;\n\n case 'MTRSettings':\n break;\n\n case 'RefreshAll':\n case 'CalcCount':\n case 'CalcDelta':\n case 'CalcIter':\n case 'CalcMode':\n case 'CalcPrecision':\n case 'CalcSaveRecalc':\n wb.opts[Rn] = val;\n break;\n\n case 'CalcRefMode':\n opts.CalcRefMode = val;\n break;\n // TODO: implement R1C1\n\n case 'Uncalced':\n break;\n\n case 'ForceFullCalculation':\n wb.opts.FullCalc = val;\n break;\n\n case 'WsBool':\n if (val.fDialog) out[\"!type\"] = \"dialog\";\n break;\n // TODO\n\n case 'XF':\n XFs.push(val);\n break;\n\n case 'ExtSST':\n break;\n // TODO\n\n case 'BookExt':\n break;\n // TODO\n\n case 'RichTextStream':\n break;\n\n case 'BkHim':\n break;\n\n case 'SupBook':\n supbooks.push([val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 'ExternName':\n supbooks[supbooks.length - 1].push(val);\n break;\n\n case 'Index':\n break;\n // TODO\n\n case 'Lbl':\n last_lbl = {\n Name: val.Name,\n Ref: stringify_formula(val.rgce, range, null, supbooks, opts)\n };\n if (val.itab > 0) last_lbl.Sheet = val.itab - 1;\n supbooks.names.push(last_lbl);\n\n if (!supbooks[0]) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].push(val);\n if (val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0) if (val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d') FilterDatabases[val.itab - 1] = {\n ref: encode_range(val.rgce[0][0][1][2])\n };\n break;\n\n case 'ExternCount':\n opts.ExternCount = val;\n break;\n\n case 'ExternSheet':\n if (supbooks.length == 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 'NameCmt':\n /* TODO: search for correct name */\n if (opts.biff < 8) break;\n if (last_lbl != null) last_lbl.Comment = val[1];\n break;\n\n case 'Protect':\n out[\"!protect\"] = val;\n break;\n\n /* for sheet or book */\n\n case 'Password':\n if (val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val);\n break;\n\n case 'Prot4Rev':\n case 'Prot4RevPass':\n break;\n\n /*TODO: Revision Control*/\n\n case 'BoundSheet8':\n {\n Directory[val.pos] = val;\n opts.snames.push(val.name);\n }\n break;\n\n case 'EOF':\n {\n if (--file_depth) break;\n\n if (range.e) {\n if (range.e.r > 0 && range.e.c > 0) {\n range.e.r--;\n range.e.c--;\n out[\"!ref\"] = encode_range(range);\n\n if (options.sheetRows && options.sheetRows <= range.e.r) {\n var tmpri = range.e.r;\n range.e.r = options.sheetRows - 1;\n out[\"!fullref\"] = out[\"!ref\"];\n out[\"!ref\"] = encode_range(range);\n range.e.r = tmpri;\n }\n\n range.e.r++;\n range.e.c++;\n }\n\n if (merges.length > 0) out[\"!merges\"] = merges;\n if (objects.length > 0) out[\"!objects\"] = objects;\n if (colinfo.length > 0) out[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n Workbook.Sheets.push(wsprops);\n }\n\n if (cur_sheet === \"\") Preamble = out;else Sheets[cur_sheet] = out;\n out = options.dense ? [] : {};\n }\n break;\n\n case 'BOF':\n {\n if (opts.biff === 8) opts.biff = {\n 0x0009: 2,\n 0x0209: 3,\n 0x0409: 4\n }[RecordType] || {\n 0x0200: 2,\n 0x0300: 3,\n 0x0400: 4,\n 0x0500: 5,\n 0x0600: 8,\n 0x0002: 2,\n 0x0007: 2\n }[val.BIFFVer] || 8;\n if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n if (file_depth++) break;\n cell_valid = true;\n out = options.dense ? [] : {};\n\n if (opts.biff < 8 && !seen_codepage) {\n seen_codepage = true;\n set_cp(opts.codepage = options.codepage || 1252);\n }\n\n if (opts.biff < 5) {\n if (cur_sheet === \"\") cur_sheet = \"Sheet1\";\n range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* fake BoundSheet8 */\n\n var fakebs8 = {\n pos: blob.l - length,\n name: cur_sheet\n };\n Directory[fakebs8.pos] = fakebs8;\n opts.snames.push(cur_sheet);\n } else cur_sheet = (Directory[s] || {\n name: \"\"\n }).name;\n\n if (val.dt == 0x20) out[\"!type\"] = \"chart\";\n if (val.dt == 0x40) out[\"!type\"] = \"macro\";\n merges = [];\n objects = [];\n opts.arrayf = arrayf = [];\n colinfo = [];\n rowinfo = [];\n defwidth = defheight = 0;\n seencol = false;\n wsprops = {\n Hidden: (Directory[s] || {\n hs: 0\n }).hs,\n name: cur_sheet\n };\n }\n break;\n\n case 'Number':\n case 'BIFF2NUM':\n case 'BIFF2INT':\n {\n if (out[\"!type\"] == \"chart\") if (options.dense ? (out[val.r] || [])[val.c] : out[encode_cell({\n c: val.c,\n r: val.r\n })]) ++val.c;\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe] || {},\n v: val.val,\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'BoolErr':\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.val,\n t: val.t\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'RK':\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.rknum,\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 'MulRk':\n {\n for (var j = val.c; j <= val.C; ++j) {\n var ixfe = val.rkrec[j - val.c][0];\n temp_val = {\n ixfe: ixfe,\n XF: XFs[ixfe],\n v: val.rkrec[j - val.c][1],\n t: 'n'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: j,\n r: val.r\n }, temp_val, options);\n }\n }\n break;\n\n case 'Formula':\n {\n if (val.val == 'String') {\n last_formula = val;\n break;\n }\n\n temp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n var _f = val.formula;\n\n if (_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n var _fr = _f[0][0][1][0],\n _fc = _f[0][0][1][1];\n\n var _fe = encode_cell({\n r: _fr,\n c: _fc\n });\n\n if (sharedf[_fe]) temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);else temp_val.F = ((options.dense ? (out[_fr] || [])[_fc] : out[_fe]) || {}).F;\n } else temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(val.cell, temp_val, options);\n last_formula = val;\n }\n break;\n\n case 'String':\n {\n if (last_formula) {\n /* technically always true */\n last_formula.val = val;\n temp_val = make_cell(val, last_formula.cell.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n temp_val.f = \"\" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(last_formula.cell, temp_val, options);\n last_formula = null;\n } else throw new Error(\"String record expects Formula\");\n }\n break;\n\n case 'Array':\n {\n arrayf.push(val);\n\n var _arraystart = encode_cell(val[0].s);\n\n cc = options.dense ? (out[val[0].s.r] || [])[val[0].s.c] : out[_arraystart];\n\n if (options.cellFormula && cc) {\n if (!last_formula) break;\n /* technically unreachable */\n\n if (!_arraystart || !cc) break;\n cc.f = \"\" + stringify_formula(val[1], range, val[0], supbooks, opts);\n cc.F = encode_range(val[0]);\n }\n }\n break;\n\n case 'ShrFmla':\n {\n if (!cell_valid) break;\n if (!options.cellFormula) break;\n\n if (last_cell) {\n /* TODO: capture range */\n if (!last_formula) break;\n /* technically unreachable */\n\n sharedf[encode_cell(last_formula.cell)] = val[0];\n cc = options.dense ? (out[last_formula.cell.r] || [])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n (cc || {}).f = \"\" + stringify_formula(val[0], range, lastcell, supbooks, opts);\n }\n }\n break;\n\n case 'LabelSst':\n temp_val = make_cell(sst[val.isst].t, val.ixfe, 's');\n if (sst[val.isst].h) temp_val.h = sst[val.isst].h;\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 'Blank':\n if (options.sheetStubs) {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n t: 'z'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n\n break;\n\n case 'MulBlank':\n if (options.sheetStubs) {\n for (var _j = val.c; _j <= val.C; ++_j) {\n var _ixfe = val.ixfe[_j - val.c];\n temp_val = {\n ixfe: _ixfe,\n XF: XFs[_ixfe],\n t: 'z'\n };\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: _j,\n r: val.r\n }, temp_val, options);\n }\n }\n\n break;\n\n case 'RString':\n case 'Label':\n case 'BIFF2STR':\n temp_val = make_cell(val.val, val.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x1F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 'Dimensions':\n {\n if (file_depth === 1) range = val;\n /* TODO: stack */\n }\n break;\n\n case 'SST':\n {\n sst = val;\n }\n break;\n\n case 'Format':\n {\n /* val = [id, fmt] */\n if (opts.biff == 4) {\n BIFF2FmtTable[BIFF2Fmt++] = val[1];\n\n for (var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) {\n if (SSF._table[b4idx] == val[1]) break;\n }\n\n if (b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n } else SSF.load(val[1], val[0]);\n }\n break;\n\n case 'BIFF2FORMAT':\n {\n BIFF2FmtTable[BIFF2Fmt++] = val;\n\n for (var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) {\n if (SSF._table[b2idx] == val) break;\n }\n\n if (b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n }\n break;\n\n case 'MergeCells':\n merges = merges.concat(val);\n break;\n\n case 'Obj':\n objects[val.cmo[0]] = opts.lastobj = val;\n break;\n\n case 'TxO':\n opts.lastobj.TxO = val;\n break;\n\n case 'ImData':\n opts.lastobj.ImData = val;\n break;\n\n case 'HLink':\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc) cc.l = val[1];\n }\n }\n }\n break;\n\n case 'HLinkTooltip':\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc && cc.l) cc.l.Tooltip = val[1];\n }\n }\n }\n break;\n\n /* Comments */\n\n case 'Note':\n {\n if (opts.biff <= 5 && opts.biff >= 2) break;\n /* TODO: BIFF5 */\n\n cc = options.dense ? (out[val[0].r] || [])[val[0].c] : out[encode_cell(val[0])];\n var noteobj = objects[val[2]];\n\n if (!cc) {\n if (options.dense) {\n if (!out[val[0].r]) out[val[0].r] = [];\n cc = out[val[0].r][val[0].c] = {\n t: \"z\"\n };\n } else {\n cc = out[encode_cell(val[0])] = {\n t: \"z\"\n };\n }\n\n range.e.r = Math.max(range.e.r, val[0].r);\n range.s.r = Math.min(range.s.r, val[0].r);\n range.e.c = Math.max(range.e.c, val[0].c);\n range.s.c = Math.min(range.s.c, val[0].c);\n }\n\n if (!cc.c) cc.c = [];\n cmnt = {\n a: val[1],\n t: noteobj.TxO.t\n };\n cc.c.push(cmnt);\n }\n break;\n\n default:\n switch (R.n) {\n /* nested */\n case 'ClrtClient':\n break;\n\n case 'XFExt':\n update_xfext(XFs[val.ixfe], val.ext);\n break;\n\n case 'DefColWidth':\n defwidth = val;\n break;\n\n case 'DefaultRowHeight':\n defheight = val[1];\n break;\n // TODO: flags\n\n case 'ColInfo':\n {\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n }\n break;\n\n case 'Row':\n {\n var rowobj = {};\n\n if (val.level != null) {\n rowinfo[val.r] = rowobj;\n rowobj.level = val.level;\n }\n\n if (val.hidden) {\n rowinfo[val.r] = rowobj;\n rowobj.hidden = true;\n }\n\n if (val.hpt) {\n rowinfo[val.r] = rowobj;\n rowobj.hpt = val.hpt;\n rowobj.hpx = pt2px(val.hpt);\n }\n }\n break;\n\n case 'LeftMargin':\n case 'RightMargin':\n case 'TopMargin':\n case 'BottomMargin':\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'][Rn.slice(0, -6).toLowerCase()] = val;\n break;\n\n case 'Setup':\n // TODO\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'].header = val.header;\n out['!margins'].footer = val.footer;\n break;\n\n case 'Window2':\n // TODO\n // $FlowIgnore\n if (val.RTL) Workbook.Views[0].RTL = true;\n break;\n\n case 'Header':\n break;\n // TODO\n\n case 'Footer':\n break;\n // TODO\n\n case 'HCenter':\n break;\n // TODO\n\n case 'VCenter':\n break;\n // TODO\n\n case 'Pls':\n break;\n // TODO\n\n case 'GCW':\n break;\n\n case 'LHRecord':\n break;\n\n case 'DBCell':\n break;\n // TODO\n\n case 'EntExU2':\n break;\n // TODO\n\n case 'SxView':\n break;\n // TODO\n\n case 'Sxvd':\n break;\n // TODO\n\n case 'SXVI':\n break;\n // TODO\n\n case 'SXVDEx':\n break;\n // TODO\n\n case 'SxIvd':\n break;\n // TODO\n\n case 'SXString':\n break;\n // TODO\n\n case 'Sync':\n break;\n\n case 'Addin':\n break;\n\n case 'SXDI':\n break;\n // TODO\n\n case 'SXLI':\n break;\n // TODO\n\n case 'SXEx':\n break;\n // TODO\n\n case 'QsiSXTag':\n break;\n // TODO\n\n case 'Selection':\n break;\n\n case 'Feat':\n break;\n\n case 'FeatHdr':\n case 'FeatHdr11':\n break;\n\n case 'Feature11':\n case 'Feature12':\n case 'List12':\n break;\n\n case 'Country':\n country = val;\n break;\n\n case 'RecalcId':\n break;\n\n case 'DxGCol':\n break;\n // TODO: htmlify\n\n case 'Fbi':\n case 'Fbi2':\n case 'GelFrame':\n break;\n\n case 'Font':\n break;\n // TODO\n\n case 'XFCRC':\n break;\n // TODO\n\n case 'Style':\n break;\n // TODO\n\n case 'StyleExt':\n break;\n // TODO\n\n case 'Palette':\n palette = val;\n break;\n\n case 'Theme':\n themes = val;\n break;\n\n /* Protection */\n\n case 'ScenarioProtect':\n break;\n\n case 'ObjProtect':\n break;\n\n /* Conditional Formatting */\n\n case 'CondFmt12':\n break;\n\n /* Table */\n\n case 'Table':\n break;\n // TODO\n\n case 'TableStyles':\n break;\n // TODO\n\n case 'TableStyle':\n break;\n // TODO\n\n case 'TableStyleElement':\n break;\n // TODO\n\n /* PivotTable */\n\n case 'SXStreamID':\n break;\n // TODO\n\n case 'SXVS':\n break;\n // TODO\n\n case 'DConRef':\n break;\n // TODO\n\n case 'SXAddl':\n break;\n // TODO\n\n case 'DConBin':\n break;\n // TODO\n\n case 'DConName':\n break;\n // TODO\n\n case 'SXPI':\n break;\n // TODO\n\n case 'SxFormat':\n break;\n // TODO\n\n case 'SxSelect':\n break;\n // TODO\n\n case 'SxRule':\n break;\n // TODO\n\n case 'SxFilt':\n break;\n // TODO\n\n case 'SxItm':\n break;\n // TODO\n\n case 'SxDXF':\n break;\n // TODO\n\n /* Scenario Manager */\n\n case 'ScenMan':\n break;\n\n /* Data Consolidation */\n\n case 'DCon':\n break;\n\n /* Watched Cell */\n\n case 'CellWatch':\n break;\n\n /* Print Settings */\n\n case 'PrintRowCol':\n break;\n\n case 'PrintGrid':\n break;\n\n case 'PrintSize':\n break;\n\n case 'XCT':\n break;\n\n case 'CRN':\n break;\n\n case 'Scl':\n {//console.log(\"Zoom Level:\", val[0]/val[1],val);\n }\n break;\n\n case 'SheetExt':\n {\n /* empty */\n }\n break;\n\n case 'SheetExtOptional':\n {\n /* empty */\n }\n break;\n\n /* VBA */\n\n case 'ObNoMacros':\n {\n /* empty */\n }\n break;\n\n case 'ObProj':\n {\n /* empty */\n }\n break;\n\n case 'CodeName':\n {\n if (!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";else wsprops.CodeName = val || wsprops.name;\n }\n break;\n\n case 'GUIDTypeLib':\n {\n /* empty */\n }\n break;\n\n case 'WOpt':\n break;\n // TODO: WTF?\n\n case 'PhoneticInfo':\n break;\n\n case 'OleObjectSize':\n break;\n\n /* Differential Formatting */\n\n case 'DXF':\n case 'DXFN':\n case 'DXFN12':\n case 'DXFN12List':\n case 'DXFN12NoCB':\n break;\n\n /* Data Validation */\n\n case 'Dv':\n case 'DVal':\n break;\n\n /* Data Series */\n\n case 'BRAI':\n case 'Series':\n case 'SeriesText':\n break;\n\n /* Data Connection */\n\n case 'DConn':\n break;\n\n case 'DbOrParamQry':\n break;\n\n case 'DBQueryExt':\n break;\n\n case 'OleDbConn':\n break;\n\n case 'ExtString':\n break;\n\n /* Formatting */\n\n case 'IFmtRecord':\n break;\n\n case 'CondFmt':\n case 'CF':\n case 'CF12':\n case 'CFEx':\n break;\n\n /* Explicitly Ignored */\n\n case 'Excel9File':\n break;\n\n case 'Units':\n break;\n\n case 'InterfaceHdr':\n case 'Mms':\n case 'InterfaceEnd':\n case 'DSF':\n break;\n\n case 'BuiltInFnGroupCount':\n /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */\n break;\n\n /* View Stuff */\n\n case 'Window1':\n case 'HideObj':\n case 'GridSet':\n case 'Guts':\n case 'UserBView':\n case 'UserSViewBegin':\n case 'UserSViewEnd':\n break;\n\n case 'Pane':\n break;\n\n default:\n switch (R.n) {\n /* nested */\n\n /* Chart */\n case 'Dat':\n case 'Begin':\n case 'End':\n case 'StartBlock':\n case 'EndBlock':\n case 'Frame':\n case 'Area':\n case 'Axis':\n case 'AxisLine':\n case 'Tick':\n break;\n\n case 'AxesUsed':\n case 'CrtLayout12':\n case 'CrtLayout12A':\n case 'CrtLink':\n case 'CrtLine':\n case 'CrtMlFrt':\n case 'CrtMlFrtContinue':\n break;\n\n case 'LineFormat':\n case 'AreaFormat':\n case 'Chart':\n case 'Chart3d':\n case 'Chart3DBarShape':\n case 'ChartFormat':\n case 'ChartFrtInfo':\n break;\n\n case 'PlotArea':\n case 'PlotGrowth':\n break;\n\n case 'SeriesList':\n case 'SerParent':\n case 'SerAuxTrend':\n break;\n\n case 'DataFormat':\n case 'SerToCrt':\n case 'FontX':\n break;\n\n case 'CatSerRange':\n case 'AxcExt':\n case 'SerFmt':\n break;\n\n case 'ShtProps':\n break;\n\n case 'DefaultText':\n case 'Text':\n case 'CatLab':\n break;\n\n case 'DataLabExtContents':\n break;\n\n case 'Legend':\n case 'LegendException':\n break;\n\n case 'Pie':\n case 'Scatter':\n break;\n\n case 'PieFormat':\n case 'MarkerFormat':\n break;\n\n case 'StartObject':\n case 'EndObject':\n break;\n\n case 'AlRuns':\n case 'ObjectLink':\n break;\n\n case 'SIIndex':\n break;\n\n case 'AttachedLabel':\n case 'YMult':\n break;\n\n /* Chart Group */\n\n case 'Line':\n case 'Bar':\n break;\n\n case 'Surf':\n break;\n\n /* Axis Group */\n\n case 'AxisParent':\n break;\n\n case 'Pos':\n break;\n\n case 'ValueRange':\n break;\n\n /* Pivot Chart */\n\n case 'SXViewEx9':\n break;\n // TODO\n\n case 'SXViewLink':\n break;\n\n case 'PivotChartBits':\n break;\n\n case 'SBaseRef':\n break;\n\n case 'TextPropsStream':\n break;\n\n /* Chart Misc */\n\n case 'LnExt':\n break;\n\n case 'MkrExt':\n break;\n\n case 'CrtCoopt':\n break;\n\n /* Query Table */\n\n case 'Qsi':\n case 'Qsif':\n case 'Qsir':\n case 'QsiSXTag':\n break;\n\n case 'TxtQry':\n break;\n\n /* Filter */\n\n case 'FilterMode':\n break;\n\n case 'AutoFilter':\n case 'AutoFilterInfo':\n break;\n\n case 'AutoFilter12':\n break;\n\n case 'DropDownObjIds':\n break;\n\n case 'Sort':\n break;\n\n case 'SortData':\n break;\n\n /* Drawing */\n\n case 'ShapePropsStream':\n break;\n\n case 'MsoDrawing':\n case 'MsoDrawingGroup':\n case 'MsoDrawingSelection':\n break;\n\n /* Pub Stuff */\n\n case 'WebPub':\n case 'AutoWebPub':\n break;\n\n /* Print Stuff */\n\n case 'HeaderFooter':\n case 'HFPicture':\n case 'PLV':\n case 'HorizontalPageBreaks':\n case 'VerticalPageBreaks':\n break;\n\n /* Behavioral */\n\n case 'Backup':\n case 'CompressPictures':\n case 'Compat12':\n break;\n\n /* Should not Happen */\n\n case 'Continue':\n case 'ContinueFrt12':\n break;\n\n /* Future Records */\n\n case 'FrtFontList':\n case 'FrtWrapper':\n break;\n\n default:\n switch (R.n) {\n /* nested */\n\n /* BIFF5 records */\n case 'TabIdConf':\n case 'Radar':\n case 'RadarArea':\n case 'DropBar':\n case 'Intl':\n case 'CoordList':\n case 'SerAuxErrBar':\n break;\n\n /* BIFF2-4 records */\n\n case 'BIFF2FONTCLR':\n case 'BIFF2FMTCNT':\n case 'BIFF2FONTXTRA':\n break;\n\n case 'BIFF2XF':\n case 'BIFF3XF':\n case 'BIFF4XF':\n break;\n\n case 'BIFF4FMTCNT':\n case 'BIFF2ROW':\n case 'BIFF2WINDOW2':\n break;\n\n /* Miscellaneous */\n\n case 'SCENARIO':\n case 'DConBin':\n case 'PicF':\n case 'DataLabExt':\n case 'Lel':\n case 'BopPop':\n case 'BopPopCustom':\n case 'RealTimeData':\n case 'Name':\n break;\n\n case 'LHNGraph':\n case 'FnGroupName':\n case 'AddMenu':\n case 'LPr':\n break;\n\n case 'ListObj':\n case 'ListField':\n break;\n\n case 'RRSort':\n break;\n\n case 'BigName':\n break;\n\n case 'ToolbarHdr':\n case 'ToolbarEnd':\n break;\n\n case 'DDEObjName':\n break;\n\n case 'FRTArchId$':\n break;\n\n default:\n if (options.WTF) throw 'Unrecognized Record ' + R.n;\n }\n\n }\n\n }\n\n }\n } else blob.l += length;\n }\n\n wb.SheetNames = keys(Directory).sort(function (a, b) {\n return Number(a) - Number(b);\n }).map(function (x) {\n return Directory[x].name;\n });\n if (!options.bookSheets) wb.Sheets = Sheets;\n if (wb.Sheets) FilterDatabases.forEach(function (r, i) {\n wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r;\n });\n wb.Preamble = Preamble;\n wb.Strings = sst;\n wb.SSF = SSF.get_table();\n if (opts.enc) wb.Encryption = opts.enc;\n if (themes) wb.Themes = themes;\n wb.Metadata = {};\n if (country !== undefined) wb.Metadata.Country = country;\n if (supbooks.names.length > 0) Workbook.Names = supbooks.names;\n wb.Workbook = Workbook;\n return wb;\n }\n /* TODO: split props*/\n\n\n var PSCLSID = {\n SI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n DSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n UDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n };\n\n function parse_xls_props(cfb, props, o) {\n /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n var DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n if (DSI && DSI.size > 0) try {\n var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\n for (var d in DocSummary) {\n props[d] = DocSummary[d];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\n var SI = CFB.find(cfb, '!SummaryInformation');\n if (SI && SI.size > 0) try {\n var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\n for (var s in Summary) {\n if (props[s] == null) props[s] = Summary[s];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n\n if (props.HeadingPairs && props.TitlesOfParts) {\n load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n delete props.HeadingPairs;\n delete props.TitlesOfParts;\n }\n }\n\n function write_xls_props(wb, cfb) {\n var DSEntries = [],\n SEntries = [],\n CEntries = [];\n var i = 0,\n Keys;\n\n if (wb.Props) {\n Keys = keys(wb.Props); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n (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 }\n }\n\n if (wb.Custprops) {\n Keys = keys(wb.Custprops); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n 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 }\n }\n\n var CEntries2 = [];\n\n for (i = 0; i < CEntries.length; ++i) {\n if (XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n if (CEntries[i][1] == null) continue;\n CEntries2.push(CEntries[i]);\n }\n\n if (SEntries.length) CFB.utils.cfb_add(cfb, \"/\\x05SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n if (DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\x05DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n }\n\n function parse_xlscfb(cfb, options) {\n if (!options) options = {};\n fix_read_opts(options);\n reset_cp();\n if (options.codepage) set_ansi(options.codepage);\n var CompObj, WB;\n\n if (cfb.FullPaths) {\n if (CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n CompObj = CFB.find(cfb, '!CompObj');\n WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n } else {\n switch (options.type) {\n case 'base64':\n cfb = s2a(Base64.decode(cfb));\n break;\n\n case 'binary':\n cfb = s2a(cfb);\n break;\n\n case 'buffer':\n break;\n\n case 'array':\n if (!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb);\n break;\n }\n\n prep_blob(cfb, 0);\n WB = {\n content: cfb\n };\n }\n\n var WorkbookP;\n\n var _data;\n\n if (CompObj) parse_compobj(CompObj);\n if (options.bookProps && !options.bookSheets) WorkbookP = {};else {\n var T = has_buf ? 'buffer' : 'array';\n if (WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n /* Quattro Pro 7-8 */\n else if ((_data = CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n /* Quattro Pro 9 */\n else if ((_data = CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));else throw new Error(\"Cannot find Workbook stream\");\n if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n }\n var props = {};\n if (cfb.FullPaths) parse_xls_props(cfb, props, options);\n WorkbookP.Props = WorkbookP.Custprops = props;\n /* TODO: split up properties */\n\n if (options.bookFiles) WorkbookP.cfb = cfb;\n /*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\n\n return WorkbookP;\n }\n\n function write_xlscfb(wb, opts) {\n var o = opts || {};\n var cfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n var wbpath = \"/Workbook\";\n\n switch (o.bookType || \"xls\") {\n case \"xls\":\n o.bookType = \"biff8\";\n\n /* falls through */\n\n case \"xla\":\n if (!o.bookType) o.bookType = \"xla\";\n\n /* falls through */\n\n case \"biff8\":\n wbpath = \"/Workbook\";\n o.biff = 8;\n break;\n\n case \"biff5\":\n wbpath = \"/Book\";\n o.biff = 5;\n break;\n\n default:\n throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n }\n\n CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n if (o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb); // TODO: SI, DSI, CO\n\n if (o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {\n type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"\n }));\n return cfb;\n }\n /* [MS-XLSB] 2.3 Record Enumeration */\n\n\n var XLSBRecordEnum = {\n 0x0000: {\n n: \"BrtRowHdr\",\n f: parse_BrtRowHdr\n },\n 0x0001: {\n n: \"BrtCellBlank\",\n f: parse_BrtCellBlank\n },\n 0x0002: {\n n: \"BrtCellRk\",\n f: parse_BrtCellRk\n },\n 0x0003: {\n n: \"BrtCellError\",\n f: parse_BrtCellError\n },\n 0x0004: {\n n: \"BrtCellBool\",\n f: parse_BrtCellBool\n },\n 0x0005: {\n n: \"BrtCellReal\",\n f: parse_BrtCellReal\n },\n 0x0006: {\n n: \"BrtCellSt\",\n f: parse_BrtCellSt\n },\n 0x0007: {\n n: \"BrtCellIsst\",\n f: parse_BrtCellIsst\n },\n 0x0008: {\n n: \"BrtFmlaString\",\n f: parse_BrtFmlaString\n },\n 0x0009: {\n n: \"BrtFmlaNum\",\n f: parse_BrtFmlaNum\n },\n 0x000A: {\n n: \"BrtFmlaBool\",\n f: parse_BrtFmlaBool\n },\n 0x000B: {\n n: \"BrtFmlaError\",\n f: parse_BrtFmlaError\n },\n 0x0010: {\n n: \"BrtFRTArchID$\",\n f: parse_BrtFRTArchID$\n },\n 0x0013: {\n n: \"BrtSSTItem\",\n f: parse_RichStr\n },\n 0x0014: {\n n: \"BrtPCDIMissing\"\n },\n 0x0015: {\n n: \"BrtPCDINumber\"\n },\n 0x0016: {\n n: \"BrtPCDIBoolean\"\n },\n 0x0017: {\n n: \"BrtPCDIError\"\n },\n 0x0018: {\n n: \"BrtPCDIString\"\n },\n 0x0019: {\n n: \"BrtPCDIDatetime\"\n },\n 0x001A: {\n n: \"BrtPCDIIndex\"\n },\n 0x001B: {\n n: \"BrtPCDIAMissing\"\n },\n 0x001C: {\n n: \"BrtPCDIANumber\"\n },\n 0x001D: {\n n: \"BrtPCDIABoolean\"\n },\n 0x001E: {\n n: \"BrtPCDIAError\"\n },\n 0x001F: {\n n: \"BrtPCDIAString\"\n },\n 0x0020: {\n n: \"BrtPCDIADatetime\"\n },\n 0x0021: {\n n: \"BrtPCRRecord\"\n },\n 0x0022: {\n n: \"BrtPCRRecordDt\"\n },\n 0x0023: {\n n: \"BrtFRTBegin\"\n },\n 0x0024: {\n n: \"BrtFRTEnd\"\n },\n 0x0025: {\n n: \"BrtACBegin\"\n },\n 0x0026: {\n n: \"BrtACEnd\"\n },\n 0x0027: {\n n: \"BrtName\",\n f: parse_BrtName\n },\n 0x0028: {\n n: \"BrtIndexRowBlock\"\n },\n 0x002A: {\n n: \"BrtIndexBlock\"\n },\n 0x002B: {\n n: \"BrtFont\",\n f: parse_BrtFont\n },\n 0x002C: {\n n: \"BrtFmt\",\n f: parse_BrtFmt\n },\n 0x002D: {\n n: \"BrtFill\",\n f: parse_BrtFill\n },\n 0x002E: {\n n: \"BrtBorder\",\n f: parse_BrtBorder\n },\n 0x002F: {\n n: \"BrtXF\",\n f: parse_BrtXF\n },\n 0x0030: {\n n: \"BrtStyle\"\n },\n 0x0031: {\n n: \"BrtCellMeta\"\n },\n 0x0032: {\n n: \"BrtValueMeta\"\n },\n 0x0033: {\n n: \"BrtMdb\"\n },\n 0x0034: {\n n: \"BrtBeginFmd\"\n },\n 0x0035: {\n n: \"BrtEndFmd\"\n },\n 0x0036: {\n n: \"BrtBeginMdx\"\n },\n 0x0037: {\n n: \"BrtEndMdx\"\n },\n 0x0038: {\n n: \"BrtBeginMdxTuple\"\n },\n 0x0039: {\n n: \"BrtEndMdxTuple\"\n },\n 0x003A: {\n n: \"BrtMdxMbrIstr\"\n },\n 0x003B: {\n n: \"BrtStr\"\n },\n 0x003C: {\n n: \"BrtColInfo\",\n f: parse_ColInfo\n },\n 0x003E: {\n n: \"BrtCellRString\"\n },\n 0x003F: {\n n: \"BrtCalcChainItem$\",\n f: parse_BrtCalcChainItem$\n },\n 0x0040: {\n n: \"BrtDVal\",\n f: parse_BrtDVal\n },\n 0x0041: {\n n: \"BrtSxvcellNum\"\n },\n 0x0042: {\n n: \"BrtSxvcellStr\"\n },\n 0x0043: {\n n: \"BrtSxvcellBool\"\n },\n 0x0044: {\n n: \"BrtSxvcellErr\"\n },\n 0x0045: {\n n: \"BrtSxvcellDate\"\n },\n 0x0046: {\n n: \"BrtSxvcellNil\"\n },\n 0x0080: {\n n: \"BrtFileVersion\"\n },\n 0x0081: {\n n: \"BrtBeginSheet\"\n },\n 0x0082: {\n n: \"BrtEndSheet\"\n },\n 0x0083: {\n n: \"BrtBeginBook\",\n f: parsenoop,\n p: 0\n },\n 0x0084: {\n n: \"BrtEndBook\"\n },\n 0x0085: {\n n: \"BrtBeginWsViews\"\n },\n 0x0086: {\n n: \"BrtEndWsViews\"\n },\n 0x0087: {\n n: \"BrtBeginBookViews\"\n },\n 0x0088: {\n n: \"BrtEndBookViews\"\n },\n 0x0089: {\n n: \"BrtBeginWsView\",\n f: parse_BrtBeginWsView\n },\n 0x008A: {\n n: \"BrtEndWsView\"\n },\n 0x008B: {\n n: \"BrtBeginCsViews\"\n },\n 0x008C: {\n n: \"BrtEndCsViews\"\n },\n 0x008D: {\n n: \"BrtBeginCsView\"\n },\n 0x008E: {\n n: \"BrtEndCsView\"\n },\n 0x008F: {\n n: \"BrtBeginBundleShs\"\n },\n 0x0090: {\n n: \"BrtEndBundleShs\"\n },\n 0x0091: {\n n: \"BrtBeginSheetData\"\n },\n 0x0092: {\n n: \"BrtEndSheetData\"\n },\n 0x0093: {\n n: \"BrtWsProp\",\n f: parse_BrtWsProp\n },\n 0x0094: {\n n: \"BrtWsDim\",\n f: parse_BrtWsDim,\n p: 16\n },\n 0x0097: {\n n: \"BrtPane\",\n f: parse_BrtPane\n },\n 0x0098: {\n n: \"BrtSel\"\n },\n 0x0099: {\n n: \"BrtWbProp\",\n f: parse_BrtWbProp\n },\n 0x009A: {\n n: \"BrtWbFactoid\"\n },\n 0x009B: {\n n: \"BrtFileRecover\"\n },\n 0x009C: {\n n: \"BrtBundleSh\",\n f: parse_BrtBundleSh\n },\n 0x009D: {\n n: \"BrtCalcProp\"\n },\n 0x009E: {\n n: \"BrtBookView\"\n },\n 0x009F: {\n n: \"BrtBeginSst\",\n f: parse_BrtBeginSst\n },\n 0x00A0: {\n n: \"BrtEndSst\"\n },\n 0x00A1: {\n n: \"BrtBeginAFilter\",\n f: parse_UncheckedRfX\n },\n 0x00A2: {\n n: \"BrtEndAFilter\"\n },\n 0x00A3: {\n n: \"BrtBeginFilterColumn\"\n },\n 0x00A4: {\n n: \"BrtEndFilterColumn\"\n },\n 0x00A5: {\n n: \"BrtBeginFilters\"\n },\n 0x00A6: {\n n: \"BrtEndFilters\"\n },\n 0x00A7: {\n n: \"BrtFilter\"\n },\n 0x00A8: {\n n: \"BrtColorFilter\"\n },\n 0x00A9: {\n n: \"BrtIconFilter\"\n },\n 0x00AA: {\n n: \"BrtTop10Filter\"\n },\n 0x00AB: {\n n: \"BrtDynamicFilter\"\n },\n 0x00AC: {\n n: \"BrtBeginCustomFilters\"\n },\n 0x00AD: {\n n: \"BrtEndCustomFilters\"\n },\n 0x00AE: {\n n: \"BrtCustomFilter\"\n },\n 0x00AF: {\n n: \"BrtAFilterDateGroupItem\"\n },\n 0x00B0: {\n n: \"BrtMergeCell\",\n f: parse_BrtMergeCell\n },\n 0x00B1: {\n n: \"BrtBeginMergeCells\"\n },\n 0x00B2: {\n n: \"BrtEndMergeCells\"\n },\n 0x00B3: {\n n: \"BrtBeginPivotCacheDef\"\n },\n 0x00B4: {\n n: \"BrtEndPivotCacheDef\"\n },\n 0x00B5: {\n n: \"BrtBeginPCDFields\"\n },\n 0x00B6: {\n n: \"BrtEndPCDFields\"\n },\n 0x00B7: {\n n: \"BrtBeginPCDField\"\n },\n 0x00B8: {\n n: \"BrtEndPCDField\"\n },\n 0x00B9: {\n n: \"BrtBeginPCDSource\"\n },\n 0x00BA: {\n n: \"BrtEndPCDSource\"\n },\n 0x00BB: {\n n: \"BrtBeginPCDSRange\"\n },\n 0x00BC: {\n n: \"BrtEndPCDSRange\"\n },\n 0x00BD: {\n n: \"BrtBeginPCDFAtbl\"\n },\n 0x00BE: {\n n: \"BrtEndPCDFAtbl\"\n },\n 0x00BF: {\n n: \"BrtBeginPCDIRun\"\n },\n 0x00C0: {\n n: \"BrtEndPCDIRun\"\n },\n 0x00C1: {\n n: \"BrtBeginPivotCacheRecords\"\n },\n 0x00C2: {\n n: \"BrtEndPivotCacheRecords\"\n },\n 0x00C3: {\n n: \"BrtBeginPCDHierarchies\"\n },\n 0x00C4: {\n n: \"BrtEndPCDHierarchies\"\n },\n 0x00C5: {\n n: \"BrtBeginPCDHierarchy\"\n },\n 0x00C6: {\n n: \"BrtEndPCDHierarchy\"\n },\n 0x00C7: {\n n: \"BrtBeginPCDHFieldsUsage\"\n },\n 0x00C8: {\n n: \"BrtEndPCDHFieldsUsage\"\n },\n 0x00C9: {\n n: \"BrtBeginExtConnection\"\n },\n 0x00CA: {\n n: \"BrtEndExtConnection\"\n },\n 0x00CB: {\n n: \"BrtBeginECDbProps\"\n },\n 0x00CC: {\n n: \"BrtEndECDbProps\"\n },\n 0x00CD: {\n n: \"BrtBeginECOlapProps\"\n },\n 0x00CE: {\n n: \"BrtEndECOlapProps\"\n },\n 0x00CF: {\n n: \"BrtBeginPCDSConsol\"\n },\n 0x00D0: {\n n: \"BrtEndPCDSConsol\"\n },\n 0x00D1: {\n n: \"BrtBeginPCDSCPages\"\n },\n 0x00D2: {\n n: \"BrtEndPCDSCPages\"\n },\n 0x00D3: {\n n: \"BrtBeginPCDSCPage\"\n },\n 0x00D4: {\n n: \"BrtEndPCDSCPage\"\n },\n 0x00D5: {\n n: \"BrtBeginPCDSCPItem\"\n },\n 0x00D6: {\n n: \"BrtEndPCDSCPItem\"\n },\n 0x00D7: {\n n: \"BrtBeginPCDSCSets\"\n },\n 0x00D8: {\n n: \"BrtEndPCDSCSets\"\n },\n 0x00D9: {\n n: \"BrtBeginPCDSCSet\"\n },\n 0x00DA: {\n n: \"BrtEndPCDSCSet\"\n },\n 0x00DB: {\n n: \"BrtBeginPCDFGroup\"\n },\n 0x00DC: {\n n: \"BrtEndPCDFGroup\"\n },\n 0x00DD: {\n n: \"BrtBeginPCDFGItems\"\n },\n 0x00DE: {\n n: \"BrtEndPCDFGItems\"\n },\n 0x00DF: {\n n: \"BrtBeginPCDFGRange\"\n },\n 0x00E0: {\n n: \"BrtEndPCDFGRange\"\n },\n 0x00E1: {\n n: \"BrtBeginPCDFGDiscrete\"\n },\n 0x00E2: {\n n: \"BrtEndPCDFGDiscrete\"\n },\n 0x00E3: {\n n: \"BrtBeginPCDSDTupleCache\"\n },\n 0x00E4: {\n n: \"BrtEndPCDSDTupleCache\"\n },\n 0x00E5: {\n n: \"BrtBeginPCDSDTCEntries\"\n },\n 0x00E6: {\n n: \"BrtEndPCDSDTCEntries\"\n },\n 0x00E7: {\n n: \"BrtBeginPCDSDTCEMembers\"\n },\n 0x00E8: {\n n: \"BrtEndPCDSDTCEMembers\"\n },\n 0x00E9: {\n n: \"BrtBeginPCDSDTCEMember\"\n },\n 0x00EA: {\n n: \"BrtEndPCDSDTCEMember\"\n },\n 0x00EB: {\n n: \"BrtBeginPCDSDTCQueries\"\n },\n 0x00EC: {\n n: \"BrtEndPCDSDTCQueries\"\n },\n 0x00ED: {\n n: \"BrtBeginPCDSDTCQuery\"\n },\n 0x00EE: {\n n: \"BrtEndPCDSDTCQuery\"\n },\n 0x00EF: {\n n: \"BrtBeginPCDSDTCSets\"\n },\n 0x00F0: {\n n: \"BrtEndPCDSDTCSets\"\n },\n 0x00F1: {\n n: \"BrtBeginPCDSDTCSet\"\n },\n 0x00F2: {\n n: \"BrtEndPCDSDTCSet\"\n },\n 0x00F3: {\n n: \"BrtBeginPCDCalcItems\"\n },\n 0x00F4: {\n n: \"BrtEndPCDCalcItems\"\n },\n 0x00F5: {\n n: \"BrtBeginPCDCalcItem\"\n },\n 0x00F6: {\n n: \"BrtEndPCDCalcItem\"\n },\n 0x00F7: {\n n: \"BrtBeginPRule\"\n },\n 0x00F8: {\n n: \"BrtEndPRule\"\n },\n 0x00F9: {\n n: \"BrtBeginPRFilters\"\n },\n 0x00FA: {\n n: \"BrtEndPRFilters\"\n },\n 0x00FB: {\n n: \"BrtBeginPRFilter\"\n },\n 0x00FC: {\n n: \"BrtEndPRFilter\"\n },\n 0x00FD: {\n n: \"BrtBeginPNames\"\n },\n 0x00FE: {\n n: \"BrtEndPNames\"\n },\n 0x00FF: {\n n: \"BrtBeginPName\"\n },\n 0x0100: {\n n: \"BrtEndPName\"\n },\n 0x0101: {\n n: \"BrtBeginPNPairs\"\n },\n 0x0102: {\n n: \"BrtEndPNPairs\"\n },\n 0x0103: {\n n: \"BrtBeginPNPair\"\n },\n 0x0104: {\n n: \"BrtEndPNPair\"\n },\n 0x0105: {\n n: \"BrtBeginECWebProps\"\n },\n 0x0106: {\n n: \"BrtEndECWebProps\"\n },\n 0x0107: {\n n: \"BrtBeginEcWpTables\"\n },\n 0x0108: {\n n: \"BrtEndECWPTables\"\n },\n 0x0109: {\n n: \"BrtBeginECParams\"\n },\n 0x010A: {\n n: \"BrtEndECParams\"\n },\n 0x010B: {\n n: \"BrtBeginECParam\"\n },\n 0x010C: {\n n: \"BrtEndECParam\"\n },\n 0x010D: {\n n: \"BrtBeginPCDKPIs\"\n },\n 0x010E: {\n n: \"BrtEndPCDKPIs\"\n },\n 0x010F: {\n n: \"BrtBeginPCDKPI\"\n },\n 0x0110: {\n n: \"BrtEndPCDKPI\"\n },\n 0x0111: {\n n: \"BrtBeginDims\"\n },\n 0x0112: {\n n: \"BrtEndDims\"\n },\n 0x0113: {\n n: \"BrtBeginDim\"\n },\n 0x0114: {\n n: \"BrtEndDim\"\n },\n 0x0115: {\n n: \"BrtIndexPartEnd\"\n },\n 0x0116: {\n n: \"BrtBeginStyleSheet\"\n },\n 0x0117: {\n n: \"BrtEndStyleSheet\"\n },\n 0x0118: {\n n: \"BrtBeginSXView\"\n },\n 0x0119: {\n n: \"BrtEndSXVI\"\n },\n 0x011A: {\n n: \"BrtBeginSXVI\"\n },\n 0x011B: {\n n: \"BrtBeginSXVIs\"\n },\n 0x011C: {\n n: \"BrtEndSXVIs\"\n },\n 0x011D: {\n n: \"BrtBeginSXVD\"\n },\n 0x011E: {\n n: \"BrtEndSXVD\"\n },\n 0x011F: {\n n: \"BrtBeginSXVDs\"\n },\n 0x0120: {\n n: \"BrtEndSXVDs\"\n },\n 0x0121: {\n n: \"BrtBeginSXPI\"\n },\n 0x0122: {\n n: \"BrtEndSXPI\"\n },\n 0x0123: {\n n: \"BrtBeginSXPIs\"\n },\n 0x0124: {\n n: \"BrtEndSXPIs\"\n },\n 0x0125: {\n n: \"BrtBeginSXDI\"\n },\n 0x0126: {\n n: \"BrtEndSXDI\"\n },\n 0x0127: {\n n: \"BrtBeginSXDIs\"\n },\n 0x0128: {\n n: \"BrtEndSXDIs\"\n },\n 0x0129: {\n n: \"BrtBeginSXLI\"\n },\n 0x012A: {\n n: \"BrtEndSXLI\"\n },\n 0x012B: {\n n: \"BrtBeginSXLIRws\"\n },\n 0x012C: {\n n: \"BrtEndSXLIRws\"\n },\n 0x012D: {\n n: \"BrtBeginSXLICols\"\n },\n 0x012E: {\n n: \"BrtEndSXLICols\"\n },\n 0x012F: {\n n: \"BrtBeginSXFormat\"\n },\n 0x0130: {\n n: \"BrtEndSXFormat\"\n },\n 0x0131: {\n n: \"BrtBeginSXFormats\"\n },\n 0x0132: {\n n: \"BrtEndSxFormats\"\n },\n 0x0133: {\n n: \"BrtBeginSxSelect\"\n },\n 0x0134: {\n n: \"BrtEndSxSelect\"\n },\n 0x0135: {\n n: \"BrtBeginISXVDRws\"\n },\n 0x0136: {\n n: \"BrtEndISXVDRws\"\n },\n 0x0137: {\n n: \"BrtBeginISXVDCols\"\n },\n 0x0138: {\n n: \"BrtEndISXVDCols\"\n },\n 0x0139: {\n n: \"BrtEndSXLocation\"\n },\n 0x013A: {\n n: \"BrtBeginSXLocation\"\n },\n 0x013B: {\n n: \"BrtEndSXView\"\n },\n 0x013C: {\n n: \"BrtBeginSXTHs\"\n },\n 0x013D: {\n n: \"BrtEndSXTHs\"\n },\n 0x013E: {\n n: \"BrtBeginSXTH\"\n },\n 0x013F: {\n n: \"BrtEndSXTH\"\n },\n 0x0140: {\n n: \"BrtBeginISXTHRws\"\n },\n 0x0141: {\n n: \"BrtEndISXTHRws\"\n },\n 0x0142: {\n n: \"BrtBeginISXTHCols\"\n },\n 0x0143: {\n n: \"BrtEndISXTHCols\"\n },\n 0x0144: {\n n: \"BrtBeginSXTDMPS\"\n },\n 0x0145: {\n n: \"BrtEndSXTDMPs\"\n },\n 0x0146: {\n n: \"BrtBeginSXTDMP\"\n },\n 0x0147: {\n n: \"BrtEndSXTDMP\"\n },\n 0x0148: {\n n: \"BrtBeginSXTHItems\"\n },\n 0x0149: {\n n: \"BrtEndSXTHItems\"\n },\n 0x014A: {\n n: \"BrtBeginSXTHItem\"\n },\n 0x014B: {\n n: \"BrtEndSXTHItem\"\n },\n 0x014C: {\n n: \"BrtBeginMetadata\"\n },\n 0x014D: {\n n: \"BrtEndMetadata\"\n },\n 0x014E: {\n n: \"BrtBeginEsmdtinfo\"\n },\n 0x014F: {\n n: \"BrtMdtinfo\"\n },\n 0x0150: {\n n: \"BrtEndEsmdtinfo\"\n },\n 0x0151: {\n n: \"BrtBeginEsmdb\"\n },\n 0x0152: {\n n: \"BrtEndEsmdb\"\n },\n 0x0153: {\n n: \"BrtBeginEsfmd\"\n },\n 0x0154: {\n n: \"BrtEndEsfmd\"\n },\n 0x0155: {\n n: \"BrtBeginSingleCells\"\n },\n 0x0156: {\n n: \"BrtEndSingleCells\"\n },\n 0x0157: {\n n: \"BrtBeginList\"\n },\n 0x0158: {\n n: \"BrtEndList\"\n },\n 0x0159: {\n n: \"BrtBeginListCols\"\n },\n 0x015A: {\n n: \"BrtEndListCols\"\n },\n 0x015B: {\n n: \"BrtBeginListCol\"\n },\n 0x015C: {\n n: \"BrtEndListCol\"\n },\n 0x015D: {\n n: \"BrtBeginListXmlCPr\"\n },\n 0x015E: {\n n: \"BrtEndListXmlCPr\"\n },\n 0x015F: {\n n: \"BrtListCCFmla\"\n },\n 0x0160: {\n n: \"BrtListTrFmla\"\n },\n 0x0161: {\n n: \"BrtBeginExternals\"\n },\n 0x0162: {\n n: \"BrtEndExternals\"\n },\n 0x0163: {\n n: \"BrtSupBookSrc\",\n f: parse_RelID\n },\n 0x0165: {\n n: \"BrtSupSelf\"\n },\n 0x0166: {\n n: \"BrtSupSame\"\n },\n 0x0167: {\n n: \"BrtSupTabs\"\n },\n 0x0168: {\n n: \"BrtBeginSupBook\"\n },\n 0x0169: {\n n: \"BrtPlaceholderName\"\n },\n 0x016A: {\n n: \"BrtExternSheet\",\n f: parse_ExternSheet\n },\n 0x016B: {\n n: \"BrtExternTableStart\"\n },\n 0x016C: {\n n: \"BrtExternTableEnd\"\n },\n 0x016E: {\n n: \"BrtExternRowHdr\"\n },\n 0x016F: {\n n: \"BrtExternCellBlank\"\n },\n 0x0170: {\n n: \"BrtExternCellReal\"\n },\n 0x0171: {\n n: \"BrtExternCellBool\"\n },\n 0x0172: {\n n: \"BrtExternCellError\"\n },\n 0x0173: {\n n: \"BrtExternCellString\"\n },\n 0x0174: {\n n: \"BrtBeginEsmdx\"\n },\n 0x0175: {\n n: \"BrtEndEsmdx\"\n },\n 0x0176: {\n n: \"BrtBeginMdxSet\"\n },\n 0x0177: {\n n: \"BrtEndMdxSet\"\n },\n 0x0178: {\n n: \"BrtBeginMdxMbrProp\"\n },\n 0x0179: {\n n: \"BrtEndMdxMbrProp\"\n },\n 0x017A: {\n n: \"BrtBeginMdxKPI\"\n },\n 0x017B: {\n n: \"BrtEndMdxKPI\"\n },\n 0x017C: {\n n: \"BrtBeginEsstr\"\n },\n 0x017D: {\n n: \"BrtEndEsstr\"\n },\n 0x017E: {\n n: \"BrtBeginPRFItem\"\n },\n 0x017F: {\n n: \"BrtEndPRFItem\"\n },\n 0x0180: {\n n: \"BrtBeginPivotCacheIDs\"\n },\n 0x0181: {\n n: \"BrtEndPivotCacheIDs\"\n },\n 0x0182: {\n n: \"BrtBeginPivotCacheID\"\n },\n 0x0183: {\n n: \"BrtEndPivotCacheID\"\n },\n 0x0184: {\n n: \"BrtBeginISXVIs\"\n },\n 0x0185: {\n n: \"BrtEndISXVIs\"\n },\n 0x0186: {\n n: \"BrtBeginColInfos\"\n },\n 0x0187: {\n n: \"BrtEndColInfos\"\n },\n 0x0188: {\n n: \"BrtBeginRwBrk\"\n },\n 0x0189: {\n n: \"BrtEndRwBrk\"\n },\n 0x018A: {\n n: \"BrtBeginColBrk\"\n },\n 0x018B: {\n n: \"BrtEndColBrk\"\n },\n 0x018C: {\n n: \"BrtBrk\"\n },\n 0x018D: {\n n: \"BrtUserBookView\"\n },\n 0x018E: {\n n: \"BrtInfo\"\n },\n 0x018F: {\n n: \"BrtCUsr\"\n },\n 0x0190: {\n n: \"BrtUsr\"\n },\n 0x0191: {\n n: \"BrtBeginUsers\"\n },\n 0x0193: {\n n: \"BrtEOF\"\n },\n 0x0194: {\n n: \"BrtUCR\"\n },\n 0x0195: {\n n: \"BrtRRInsDel\"\n },\n 0x0196: {\n n: \"BrtRREndInsDel\"\n },\n 0x0197: {\n n: \"BrtRRMove\"\n },\n 0x0198: {\n n: \"BrtRREndMove\"\n },\n 0x0199: {\n n: \"BrtRRChgCell\"\n },\n 0x019A: {\n n: \"BrtRREndChgCell\"\n },\n 0x019B: {\n n: \"BrtRRHeader\"\n },\n 0x019C: {\n n: \"BrtRRUserView\"\n },\n 0x019D: {\n n: \"BrtRRRenSheet\"\n },\n 0x019E: {\n n: \"BrtRRInsertSh\"\n },\n 0x019F: {\n n: \"BrtRRDefName\"\n },\n 0x01A0: {\n n: \"BrtRRNote\"\n },\n 0x01A1: {\n n: \"BrtRRConflict\"\n },\n 0x01A2: {\n n: \"BrtRRTQSIF\"\n },\n 0x01A3: {\n n: \"BrtRRFormat\"\n },\n 0x01A4: {\n n: \"BrtRREndFormat\"\n },\n 0x01A5: {\n n: \"BrtRRAutoFmt\"\n },\n 0x01A6: {\n n: \"BrtBeginUserShViews\"\n },\n 0x01A7: {\n n: \"BrtBeginUserShView\"\n },\n 0x01A8: {\n n: \"BrtEndUserShView\"\n },\n 0x01A9: {\n n: \"BrtEndUserShViews\"\n },\n 0x01AA: {\n n: \"BrtArrFmla\",\n f: parse_BrtArrFmla\n },\n 0x01AB: {\n n: \"BrtShrFmla\",\n f: parse_BrtShrFmla\n },\n 0x01AC: {\n n: \"BrtTable\"\n },\n 0x01AD: {\n n: \"BrtBeginExtConnections\"\n },\n 0x01AE: {\n n: \"BrtEndExtConnections\"\n },\n 0x01AF: {\n n: \"BrtBeginPCDCalcMems\"\n },\n 0x01B0: {\n n: \"BrtEndPCDCalcMems\"\n },\n 0x01B1: {\n n: \"BrtBeginPCDCalcMem\"\n },\n 0x01B2: {\n n: \"BrtEndPCDCalcMem\"\n },\n 0x01B3: {\n n: \"BrtBeginPCDHGLevels\"\n },\n 0x01B4: {\n n: \"BrtEndPCDHGLevels\"\n },\n 0x01B5: {\n n: \"BrtBeginPCDHGLevel\"\n },\n 0x01B6: {\n n: \"BrtEndPCDHGLevel\"\n },\n 0x01B7: {\n n: \"BrtBeginPCDHGLGroups\"\n },\n 0x01B8: {\n n: \"BrtEndPCDHGLGroups\"\n },\n 0x01B9: {\n n: \"BrtBeginPCDHGLGroup\"\n },\n 0x01BA: {\n n: \"BrtEndPCDHGLGroup\"\n },\n 0x01BB: {\n n: \"BrtBeginPCDHGLGMembers\"\n },\n 0x01BC: {\n n: \"BrtEndPCDHGLGMembers\"\n },\n 0x01BD: {\n n: \"BrtBeginPCDHGLGMember\"\n },\n 0x01BE: {\n n: \"BrtEndPCDHGLGMember\"\n },\n 0x01BF: {\n n: \"BrtBeginQSI\"\n },\n 0x01C0: {\n n: \"BrtEndQSI\"\n },\n 0x01C1: {\n n: \"BrtBeginQSIR\"\n },\n 0x01C2: {\n n: \"BrtEndQSIR\"\n },\n 0x01C3: {\n n: \"BrtBeginDeletedNames\"\n },\n 0x01C4: {\n n: \"BrtEndDeletedNames\"\n },\n 0x01C5: {\n n: \"BrtBeginDeletedName\"\n },\n 0x01C6: {\n n: \"BrtEndDeletedName\"\n },\n 0x01C7: {\n n: \"BrtBeginQSIFs\"\n },\n 0x01C8: {\n n: \"BrtEndQSIFs\"\n },\n 0x01C9: {\n n: \"BrtBeginQSIF\"\n },\n 0x01CA: {\n n: \"BrtEndQSIF\"\n },\n 0x01CB: {\n n: \"BrtBeginAutoSortScope\"\n },\n 0x01CC: {\n n: \"BrtEndAutoSortScope\"\n },\n 0x01CD: {\n n: \"BrtBeginConditionalFormatting\"\n },\n 0x01CE: {\n n: \"BrtEndConditionalFormatting\"\n },\n 0x01CF: {\n n: \"BrtBeginCFRule\"\n },\n 0x01D0: {\n n: \"BrtEndCFRule\"\n },\n 0x01D1: {\n n: \"BrtBeginIconSet\"\n },\n 0x01D2: {\n n: \"BrtEndIconSet\"\n },\n 0x01D3: {\n n: \"BrtBeginDatabar\"\n },\n 0x01D4: {\n n: \"BrtEndDatabar\"\n },\n 0x01D5: {\n n: \"BrtBeginColorScale\"\n },\n 0x01D6: {\n n: \"BrtEndColorScale\"\n },\n 0x01D7: {\n n: \"BrtCFVO\"\n },\n 0x01D8: {\n n: \"BrtExternValueMeta\"\n },\n 0x01D9: {\n n: \"BrtBeginColorPalette\"\n },\n 0x01DA: {\n n: \"BrtEndColorPalette\"\n },\n 0x01DB: {\n n: \"BrtIndexedColor\"\n },\n 0x01DC: {\n n: \"BrtMargins\",\n f: parse_BrtMargins\n },\n 0x01DD: {\n n: \"BrtPrintOptions\"\n },\n 0x01DE: {\n n: \"BrtPageSetup\"\n },\n 0x01DF: {\n n: \"BrtBeginHeaderFooter\"\n },\n 0x01E0: {\n n: \"BrtEndHeaderFooter\"\n },\n 0x01E1: {\n n: \"BrtBeginSXCrtFormat\"\n },\n 0x01E2: {\n n: \"BrtEndSXCrtFormat\"\n },\n 0x01E3: {\n n: \"BrtBeginSXCrtFormats\"\n },\n 0x01E4: {\n n: \"BrtEndSXCrtFormats\"\n },\n 0x01E5: {\n n: \"BrtWsFmtInfo\",\n f: parse_BrtWsFmtInfo\n },\n 0x01E6: {\n n: \"BrtBeginMgs\"\n },\n 0x01E7: {\n n: \"BrtEndMGs\"\n },\n 0x01E8: {\n n: \"BrtBeginMGMaps\"\n },\n 0x01E9: {\n n: \"BrtEndMGMaps\"\n },\n 0x01EA: {\n n: \"BrtBeginMG\"\n },\n 0x01EB: {\n n: \"BrtEndMG\"\n },\n 0x01EC: {\n n: \"BrtBeginMap\"\n },\n 0x01ED: {\n n: \"BrtEndMap\"\n },\n 0x01EE: {\n n: \"BrtHLink\",\n f: parse_BrtHLink\n },\n 0x01EF: {\n n: \"BrtBeginDCon\"\n },\n 0x01F0: {\n n: \"BrtEndDCon\"\n },\n 0x01F1: {\n n: \"BrtBeginDRefs\"\n },\n 0x01F2: {\n n: \"BrtEndDRefs\"\n },\n 0x01F3: {\n n: \"BrtDRef\"\n },\n 0x01F4: {\n n: \"BrtBeginScenMan\"\n },\n 0x01F5: {\n n: \"BrtEndScenMan\"\n },\n 0x01F6: {\n n: \"BrtBeginSct\"\n },\n 0x01F7: {\n n: \"BrtEndSct\"\n },\n 0x01F8: {\n n: \"BrtSlc\"\n },\n 0x01F9: {\n n: \"BrtBeginDXFs\"\n },\n 0x01FA: {\n n: \"BrtEndDXFs\"\n },\n 0x01FB: {\n n: \"BrtDXF\"\n },\n 0x01FC: {\n n: \"BrtBeginTableStyles\"\n },\n 0x01FD: {\n n: \"BrtEndTableStyles\"\n },\n 0x01FE: {\n n: \"BrtBeginTableStyle\"\n },\n 0x01FF: {\n n: \"BrtEndTableStyle\"\n },\n 0x0200: {\n n: \"BrtTableStyleElement\"\n },\n 0x0201: {\n n: \"BrtTableStyleClient\"\n },\n 0x0202: {\n n: \"BrtBeginVolDeps\"\n },\n 0x0203: {\n n: \"BrtEndVolDeps\"\n },\n 0x0204: {\n n: \"BrtBeginVolType\"\n },\n 0x0205: {\n n: \"BrtEndVolType\"\n },\n 0x0206: {\n n: \"BrtBeginVolMain\"\n },\n 0x0207: {\n n: \"BrtEndVolMain\"\n },\n 0x0208: {\n n: \"BrtBeginVolTopic\"\n },\n 0x0209: {\n n: \"BrtEndVolTopic\"\n },\n 0x020A: {\n n: \"BrtVolSubtopic\"\n },\n 0x020B: {\n n: \"BrtVolRef\"\n },\n 0x020C: {\n n: \"BrtVolNum\"\n },\n 0x020D: {\n n: \"BrtVolErr\"\n },\n 0x020E: {\n n: \"BrtVolStr\"\n },\n 0x020F: {\n n: \"BrtVolBool\"\n },\n 0x0210: {\n n: \"BrtBeginCalcChain$\"\n },\n 0x0211: {\n n: \"BrtEndCalcChain$\"\n },\n 0x0212: {\n n: \"BrtBeginSortState\"\n },\n 0x0213: {\n n: \"BrtEndSortState\"\n },\n 0x0214: {\n n: \"BrtBeginSortCond\"\n },\n 0x0215: {\n n: \"BrtEndSortCond\"\n },\n 0x0216: {\n n: \"BrtBookProtection\"\n },\n 0x0217: {\n n: \"BrtSheetProtection\"\n },\n 0x0218: {\n n: \"BrtRangeProtection\"\n },\n 0x0219: {\n n: \"BrtPhoneticInfo\"\n },\n 0x021A: {\n n: \"BrtBeginECTxtWiz\"\n },\n 0x021B: {\n n: \"BrtEndECTxtWiz\"\n },\n 0x021C: {\n n: \"BrtBeginECTWFldInfoLst\"\n },\n 0x021D: {\n n: \"BrtEndECTWFldInfoLst\"\n },\n 0x021E: {\n n: \"BrtBeginECTwFldInfo\"\n },\n 0x0224: {\n n: \"BrtFileSharing\"\n },\n 0x0225: {\n n: \"BrtOleSize\"\n },\n 0x0226: {\n n: \"BrtDrawing\",\n f: parse_RelID\n },\n 0x0227: {\n n: \"BrtLegacyDrawing\"\n },\n 0x0228: {\n n: \"BrtLegacyDrawingHF\"\n },\n 0x0229: {\n n: \"BrtWebOpt\"\n },\n 0x022A: {\n n: \"BrtBeginWebPubItems\"\n },\n 0x022B: {\n n: \"BrtEndWebPubItems\"\n },\n 0x022C: {\n n: \"BrtBeginWebPubItem\"\n },\n 0x022D: {\n n: \"BrtEndWebPubItem\"\n },\n 0x022E: {\n n: \"BrtBeginSXCondFmt\"\n },\n 0x022F: {\n n: \"BrtEndSXCondFmt\"\n },\n 0x0230: {\n n: \"BrtBeginSXCondFmts\"\n },\n 0x0231: {\n n: \"BrtEndSXCondFmts\"\n },\n 0x0232: {\n n: \"BrtBkHim\"\n },\n 0x0234: {\n n: \"BrtColor\"\n },\n 0x0235: {\n n: \"BrtBeginIndexedColors\"\n },\n 0x0236: {\n n: \"BrtEndIndexedColors\"\n },\n 0x0239: {\n n: \"BrtBeginMRUColors\"\n },\n 0x023A: {\n n: \"BrtEndMRUColors\"\n },\n 0x023C: {\n n: \"BrtMRUColor\"\n },\n 0x023D: {\n n: \"BrtBeginDVals\"\n },\n 0x023E: {\n n: \"BrtEndDVals\"\n },\n 0x0241: {\n n: \"BrtSupNameStart\"\n },\n 0x0242: {\n n: \"BrtSupNameValueStart\"\n },\n 0x0243: {\n n: \"BrtSupNameValueEnd\"\n },\n 0x0244: {\n n: \"BrtSupNameNum\"\n },\n 0x0245: {\n n: \"BrtSupNameErr\"\n },\n 0x0246: {\n n: \"BrtSupNameSt\"\n },\n 0x0247: {\n n: \"BrtSupNameNil\"\n },\n 0x0248: {\n n: \"BrtSupNameBool\"\n },\n 0x0249: {\n n: \"BrtSupNameFmla\"\n },\n 0x024A: {\n n: \"BrtSupNameBits\"\n },\n 0x024B: {\n n: \"BrtSupNameEnd\"\n },\n 0x024C: {\n n: \"BrtEndSupBook\"\n },\n 0x024D: {\n n: \"BrtCellSmartTagProperty\"\n },\n 0x024E: {\n n: \"BrtBeginCellSmartTag\"\n },\n 0x024F: {\n n: \"BrtEndCellSmartTag\"\n },\n 0x0250: {\n n: \"BrtBeginCellSmartTags\"\n },\n 0x0251: {\n n: \"BrtEndCellSmartTags\"\n },\n 0x0252: {\n n: \"BrtBeginSmartTags\"\n },\n 0x0253: {\n n: \"BrtEndSmartTags\"\n },\n 0x0254: {\n n: \"BrtSmartTagType\"\n },\n 0x0255: {\n n: \"BrtBeginSmartTagTypes\"\n },\n 0x0256: {\n n: \"BrtEndSmartTagTypes\"\n },\n 0x0257: {\n n: \"BrtBeginSXFilters\"\n },\n 0x0258: {\n n: \"BrtEndSXFilters\"\n },\n 0x0259: {\n n: \"BrtBeginSXFILTER\"\n },\n 0x025A: {\n n: \"BrtEndSXFilter\"\n },\n 0x025B: {\n n: \"BrtBeginFills\"\n },\n 0x025C: {\n n: \"BrtEndFills\"\n },\n 0x025D: {\n n: \"BrtBeginCellWatches\"\n },\n 0x025E: {\n n: \"BrtEndCellWatches\"\n },\n 0x025F: {\n n: \"BrtCellWatch\"\n },\n 0x0260: {\n n: \"BrtBeginCRErrs\"\n },\n 0x0261: {\n n: \"BrtEndCRErrs\"\n },\n 0x0262: {\n n: \"BrtCrashRecErr\"\n },\n 0x0263: {\n n: \"BrtBeginFonts\"\n },\n 0x0264: {\n n: \"BrtEndFonts\"\n },\n 0x0265: {\n n: \"BrtBeginBorders\"\n },\n 0x0266: {\n n: \"BrtEndBorders\"\n },\n 0x0267: {\n n: \"BrtBeginFmts\"\n },\n 0x0268: {\n n: \"BrtEndFmts\"\n },\n 0x0269: {\n n: \"BrtBeginCellXFs\"\n },\n 0x026A: {\n n: \"BrtEndCellXFs\"\n },\n 0x026B: {\n n: \"BrtBeginStyles\"\n },\n 0x026C: {\n n: \"BrtEndStyles\"\n },\n 0x0271: {\n n: \"BrtBigName\"\n },\n 0x0272: {\n n: \"BrtBeginCellStyleXFs\"\n },\n 0x0273: {\n n: \"BrtEndCellStyleXFs\"\n },\n 0x0274: {\n n: \"BrtBeginComments\"\n },\n 0x0275: {\n n: \"BrtEndComments\"\n },\n 0x0276: {\n n: \"BrtBeginCommentAuthors\"\n },\n 0x0277: {\n n: \"BrtEndCommentAuthors\"\n },\n 0x0278: {\n n: \"BrtCommentAuthor\",\n f: parse_BrtCommentAuthor\n },\n 0x0279: {\n n: \"BrtBeginCommentList\"\n },\n 0x027A: {\n n: \"BrtEndCommentList\"\n },\n 0x027B: {\n n: \"BrtBeginComment\",\n f: parse_BrtBeginComment\n },\n 0x027C: {\n n: \"BrtEndComment\"\n },\n 0x027D: {\n n: \"BrtCommentText\",\n f: parse_BrtCommentText\n },\n 0x027E: {\n n: \"BrtBeginOleObjects\"\n },\n 0x027F: {\n n: \"BrtOleObject\"\n },\n 0x0280: {\n n: \"BrtEndOleObjects\"\n },\n 0x0281: {\n n: \"BrtBeginSxrules\"\n },\n 0x0282: {\n n: \"BrtEndSxRules\"\n },\n 0x0283: {\n n: \"BrtBeginActiveXControls\"\n },\n 0x0284: {\n n: \"BrtActiveX\"\n },\n 0x0285: {\n n: \"BrtEndActiveXControls\"\n },\n 0x0286: {\n n: \"BrtBeginPCDSDTCEMembersSortBy\"\n },\n 0x0288: {\n n: \"BrtBeginCellIgnoreECs\"\n },\n 0x0289: {\n n: \"BrtCellIgnoreEC\"\n },\n 0x028A: {\n n: \"BrtEndCellIgnoreECs\"\n },\n 0x028B: {\n n: \"BrtCsProp\",\n f: parse_BrtCsProp\n },\n 0x028C: {\n n: \"BrtCsPageSetup\"\n },\n 0x028D: {\n n: \"BrtBeginUserCsViews\"\n },\n 0x028E: {\n n: \"BrtEndUserCsViews\"\n },\n 0x028F: {\n n: \"BrtBeginUserCsView\"\n },\n 0x0290: {\n n: \"BrtEndUserCsView\"\n },\n 0x0291: {\n n: \"BrtBeginPcdSFCIEntries\"\n },\n 0x0292: {\n n: \"BrtEndPCDSFCIEntries\"\n },\n 0x0293: {\n n: \"BrtPCDSFCIEntry\"\n },\n 0x0294: {\n n: \"BrtBeginListParts\"\n },\n 0x0295: {\n n: \"BrtListPart\"\n },\n 0x0296: {\n n: \"BrtEndListParts\"\n },\n 0x0297: {\n n: \"BrtSheetCalcProp\"\n },\n 0x0298: {\n n: \"BrtBeginFnGroup\"\n },\n 0x0299: {\n n: \"BrtFnGroup\"\n },\n 0x029A: {\n n: \"BrtEndFnGroup\"\n },\n 0x029B: {\n n: \"BrtSupAddin\"\n },\n 0x029C: {\n n: \"BrtSXTDMPOrder\"\n },\n 0x029D: {\n n: \"BrtCsProtection\"\n },\n 0x029F: {\n n: \"BrtBeginWsSortMap\"\n },\n 0x02A0: {\n n: \"BrtEndWsSortMap\"\n },\n 0x02A1: {\n n: \"BrtBeginRRSort\"\n },\n 0x02A2: {\n n: \"BrtEndRRSort\"\n },\n 0x02A3: {\n n: \"BrtRRSortItem\"\n },\n 0x02A4: {\n n: \"BrtFileSharingIso\"\n },\n 0x02A5: {\n n: \"BrtBookProtectionIso\"\n },\n 0x02A6: {\n n: \"BrtSheetProtectionIso\"\n },\n 0x02A7: {\n n: \"BrtCsProtectionIso\"\n },\n 0x02A8: {\n n: \"BrtRangeProtectionIso\"\n },\n 0x02A9: {\n n: \"BrtDValList\"\n },\n 0x0400: {\n n: \"BrtRwDescent\"\n },\n 0x0401: {\n n: \"BrtKnownFonts\"\n },\n 0x0402: {\n n: \"BrtBeginSXTupleSet\"\n },\n 0x0403: {\n n: \"BrtEndSXTupleSet\"\n },\n 0x0404: {\n n: \"BrtBeginSXTupleSetHeader\"\n },\n 0x0405: {\n n: \"BrtEndSXTupleSetHeader\"\n },\n 0x0406: {\n n: \"BrtSXTupleSetHeaderItem\"\n },\n 0x0407: {\n n: \"BrtBeginSXTupleSetData\"\n },\n 0x0408: {\n n: \"BrtEndSXTupleSetData\"\n },\n 0x0409: {\n n: \"BrtBeginSXTupleSetRow\"\n },\n 0x040A: {\n n: \"BrtEndSXTupleSetRow\"\n },\n 0x040B: {\n n: \"BrtSXTupleSetRowItem\"\n },\n 0x040C: {\n n: \"BrtNameExt\"\n },\n 0x040D: {\n n: \"BrtPCDH14\"\n },\n 0x040E: {\n n: \"BrtBeginPCDCalcMem14\"\n },\n 0x040F: {\n n: \"BrtEndPCDCalcMem14\"\n },\n 0x0410: {\n n: \"BrtSXTH14\"\n },\n 0x0411: {\n n: \"BrtBeginSparklineGroup\"\n },\n 0x0412: {\n n: \"BrtEndSparklineGroup\"\n },\n 0x0413: {\n n: \"BrtSparkline\"\n },\n 0x0414: {\n n: \"BrtSXDI14\"\n },\n 0x0415: {\n n: \"BrtWsFmtInfoEx14\"\n },\n 0x0416: {\n n: \"BrtBeginConditionalFormatting14\"\n },\n 0x0417: {\n n: \"BrtEndConditionalFormatting14\"\n },\n 0x0418: {\n n: \"BrtBeginCFRule14\"\n },\n 0x0419: {\n n: \"BrtEndCFRule14\"\n },\n 0x041A: {\n n: \"BrtCFVO14\"\n },\n 0x041B: {\n n: \"BrtBeginDatabar14\"\n },\n 0x041C: {\n n: \"BrtBeginIconSet14\"\n },\n 0x041D: {\n n: \"BrtDVal14\",\n f: parse_BrtDVal14\n },\n 0x041E: {\n n: \"BrtBeginDVals14\"\n },\n 0x041F: {\n n: \"BrtColor14\"\n },\n 0x0420: {\n n: \"BrtBeginSparklines\"\n },\n 0x0421: {\n n: \"BrtEndSparklines\"\n },\n 0x0422: {\n n: \"BrtBeginSparklineGroups\"\n },\n 0x0423: {\n n: \"BrtEndSparklineGroups\"\n },\n 0x0425: {\n n: \"BrtSXVD14\"\n },\n 0x0426: {\n n: \"BrtBeginSXView14\"\n },\n 0x0427: {\n n: \"BrtEndSXView14\"\n },\n 0x0428: {\n n: \"BrtBeginSXView16\"\n },\n 0x0429: {\n n: \"BrtEndSXView16\"\n },\n 0x042A: {\n n: \"BrtBeginPCD14\"\n },\n 0x042B: {\n n: \"BrtEndPCD14\"\n },\n 0x042C: {\n n: \"BrtBeginExtConn14\"\n },\n 0x042D: {\n n: \"BrtEndExtConn14\"\n },\n 0x042E: {\n n: \"BrtBeginSlicerCacheIDs\"\n },\n 0x042F: {\n n: \"BrtEndSlicerCacheIDs\"\n },\n 0x0430: {\n n: \"BrtBeginSlicerCacheID\"\n },\n 0x0431: {\n n: \"BrtEndSlicerCacheID\"\n },\n 0x0433: {\n n: \"BrtBeginSlicerCache\"\n },\n 0x0434: {\n n: \"BrtEndSlicerCache\"\n },\n 0x0435: {\n n: \"BrtBeginSlicerCacheDef\"\n },\n 0x0436: {\n n: \"BrtEndSlicerCacheDef\"\n },\n 0x0437: {\n n: \"BrtBeginSlicersEx\"\n },\n 0x0438: {\n n: \"BrtEndSlicersEx\"\n },\n 0x0439: {\n n: \"BrtBeginSlicerEx\"\n },\n 0x043A: {\n n: \"BrtEndSlicerEx\"\n },\n 0x043B: {\n n: \"BrtBeginSlicer\"\n },\n 0x043C: {\n n: \"BrtEndSlicer\"\n },\n 0x043D: {\n n: \"BrtSlicerCachePivotTables\"\n },\n 0x043E: {\n n: \"BrtBeginSlicerCacheOlapImpl\"\n },\n 0x043F: {\n n: \"BrtEndSlicerCacheOlapImpl\"\n },\n 0x0440: {\n n: \"BrtBeginSlicerCacheLevelsData\"\n },\n 0x0441: {\n n: \"BrtEndSlicerCacheLevelsData\"\n },\n 0x0442: {\n n: \"BrtBeginSlicerCacheLevelData\"\n },\n 0x0443: {\n n: \"BrtEndSlicerCacheLevelData\"\n },\n 0x0444: {\n n: \"BrtBeginSlicerCacheSiRanges\"\n },\n 0x0445: {\n n: \"BrtEndSlicerCacheSiRanges\"\n },\n 0x0446: {\n n: \"BrtBeginSlicerCacheSiRange\"\n },\n 0x0447: {\n n: \"BrtEndSlicerCacheSiRange\"\n },\n 0x0448: {\n n: \"BrtSlicerCacheOlapItem\"\n },\n 0x0449: {\n n: \"BrtBeginSlicerCacheSelections\"\n },\n 0x044A: {\n n: \"BrtSlicerCacheSelection\"\n },\n 0x044B: {\n n: \"BrtEndSlicerCacheSelections\"\n },\n 0x044C: {\n n: \"BrtBeginSlicerCacheNative\"\n },\n 0x044D: {\n n: \"BrtEndSlicerCacheNative\"\n },\n 0x044E: {\n n: \"BrtSlicerCacheNativeItem\"\n },\n 0x044F: {\n n: \"BrtRangeProtection14\"\n },\n 0x0450: {\n n: \"BrtRangeProtectionIso14\"\n },\n 0x0451: {\n n: \"BrtCellIgnoreEC14\"\n },\n 0x0457: {\n n: \"BrtList14\"\n },\n 0x0458: {\n n: \"BrtCFIcon\"\n },\n 0x0459: {\n n: \"BrtBeginSlicerCachesPivotCacheIDs\"\n },\n 0x045A: {\n n: \"BrtEndSlicerCachesPivotCacheIDs\"\n },\n 0x045B: {\n n: \"BrtBeginSlicers\"\n },\n 0x045C: {\n n: \"BrtEndSlicers\"\n },\n 0x045D: {\n n: \"BrtWbProp14\"\n },\n 0x045E: {\n n: \"BrtBeginSXEdit\"\n },\n 0x045F: {\n n: \"BrtEndSXEdit\"\n },\n 0x0460: {\n n: \"BrtBeginSXEdits\"\n },\n 0x0461: {\n n: \"BrtEndSXEdits\"\n },\n 0x0462: {\n n: \"BrtBeginSXChange\"\n },\n 0x0463: {\n n: \"BrtEndSXChange\"\n },\n 0x0464: {\n n: \"BrtBeginSXChanges\"\n },\n 0x0465: {\n n: \"BrtEndSXChanges\"\n },\n 0x0466: {\n n: \"BrtSXTupleItems\"\n },\n 0x0468: {\n n: \"BrtBeginSlicerStyle\"\n },\n 0x0469: {\n n: \"BrtEndSlicerStyle\"\n },\n 0x046A: {\n n: \"BrtSlicerStyleElement\"\n },\n 0x046B: {\n n: \"BrtBeginStyleSheetExt14\"\n },\n 0x046C: {\n n: \"BrtEndStyleSheetExt14\"\n },\n 0x046D: {\n n: \"BrtBeginSlicerCachesPivotCacheID\"\n },\n 0x046E: {\n n: \"BrtEndSlicerCachesPivotCacheID\"\n },\n 0x046F: {\n n: \"BrtBeginConditionalFormattings\"\n },\n 0x0470: {\n n: \"BrtEndConditionalFormattings\"\n },\n 0x0471: {\n n: \"BrtBeginPCDCalcMemExt\"\n },\n 0x0472: {\n n: \"BrtEndPCDCalcMemExt\"\n },\n 0x0473: {\n n: \"BrtBeginPCDCalcMemsExt\"\n },\n 0x0474: {\n n: \"BrtEndPCDCalcMemsExt\"\n },\n 0x0475: {\n n: \"BrtPCDField14\"\n },\n 0x0476: {\n n: \"BrtBeginSlicerStyles\"\n },\n 0x0477: {\n n: \"BrtEndSlicerStyles\"\n },\n 0x0478: {\n n: \"BrtBeginSlicerStyleElements\"\n },\n 0x0479: {\n n: \"BrtEndSlicerStyleElements\"\n },\n 0x047A: {\n n: \"BrtCFRuleExt\"\n },\n 0x047B: {\n n: \"BrtBeginSXCondFmt14\"\n },\n 0x047C: {\n n: \"BrtEndSXCondFmt14\"\n },\n 0x047D: {\n n: \"BrtBeginSXCondFmts14\"\n },\n 0x047E: {\n n: \"BrtEndSXCondFmts14\"\n },\n 0x0480: {\n n: \"BrtBeginSortCond14\"\n },\n 0x0481: {\n n: \"BrtEndSortCond14\"\n },\n 0x0482: {\n n: \"BrtEndDVals14\"\n },\n 0x0483: {\n n: \"BrtEndIconSet14\"\n },\n 0x0484: {\n n: \"BrtEndDatabar14\"\n },\n 0x0485: {\n n: \"BrtBeginColorScale14\"\n },\n 0x0486: {\n n: \"BrtEndColorScale14\"\n },\n 0x0487: {\n n: \"BrtBeginSxrules14\"\n },\n 0x0488: {\n n: \"BrtEndSxrules14\"\n },\n 0x0489: {\n n: \"BrtBeginPRule14\"\n },\n 0x048A: {\n n: \"BrtEndPRule14\"\n },\n 0x048B: {\n n: \"BrtBeginPRFilters14\"\n },\n 0x048C: {\n n: \"BrtEndPRFilters14\"\n },\n 0x048D: {\n n: \"BrtBeginPRFilter14\"\n },\n 0x048E: {\n n: \"BrtEndPRFilter14\"\n },\n 0x048F: {\n n: \"BrtBeginPRFItem14\"\n },\n 0x0490: {\n n: \"BrtEndPRFItem14\"\n },\n 0x0491: {\n n: \"BrtBeginCellIgnoreECs14\"\n },\n 0x0492: {\n n: \"BrtEndCellIgnoreECs14\"\n },\n 0x0493: {\n n: \"BrtDxf14\"\n },\n 0x0494: {\n n: \"BrtBeginDxF14s\"\n },\n 0x0495: {\n n: \"BrtEndDxf14s\"\n },\n 0x0499: {\n n: \"BrtFilter14\"\n },\n 0x049A: {\n n: \"BrtBeginCustomFilters14\"\n },\n 0x049C: {\n n: \"BrtCustomFilter14\"\n },\n 0x049D: {\n n: \"BrtIconFilter14\"\n },\n 0x049E: {\n n: \"BrtPivotCacheConnectionName\"\n },\n 0x0800: {\n n: \"BrtBeginDecoupledPivotCacheIDs\"\n },\n 0x0801: {\n n: \"BrtEndDecoupledPivotCacheIDs\"\n },\n 0x0802: {\n n: \"BrtDecoupledPivotCacheID\"\n },\n 0x0803: {\n n: \"BrtBeginPivotTableRefs\"\n },\n 0x0804: {\n n: \"BrtEndPivotTableRefs\"\n },\n 0x0805: {\n n: \"BrtPivotTableRef\"\n },\n 0x0806: {\n n: \"BrtSlicerCacheBookPivotTables\"\n },\n 0x0807: {\n n: \"BrtBeginSxvcells\"\n },\n 0x0808: {\n n: \"BrtEndSxvcells\"\n },\n 0x0809: {\n n: \"BrtBeginSxRow\"\n },\n 0x080A: {\n n: \"BrtEndSxRow\"\n },\n 0x080C: {\n n: \"BrtPcdCalcMem15\"\n },\n 0x0813: {\n n: \"BrtQsi15\"\n },\n 0x0814: {\n n: \"BrtBeginWebExtensions\"\n },\n 0x0815: {\n n: \"BrtEndWebExtensions\"\n },\n 0x0816: {\n n: \"BrtWebExtension\"\n },\n 0x0817: {\n n: \"BrtAbsPath15\"\n },\n 0x0818: {\n n: \"BrtBeginPivotTableUISettings\"\n },\n 0x0819: {\n n: \"BrtEndPivotTableUISettings\"\n },\n 0x081B: {\n n: \"BrtTableSlicerCacheIDs\"\n },\n 0x081C: {\n n: \"BrtTableSlicerCacheID\"\n },\n 0x081D: {\n n: \"BrtBeginTableSlicerCache\"\n },\n 0x081E: {\n n: \"BrtEndTableSlicerCache\"\n },\n 0x081F: {\n n: \"BrtSxFilter15\"\n },\n 0x0820: {\n n: \"BrtBeginTimelineCachePivotCacheIDs\"\n },\n 0x0821: {\n n: \"BrtEndTimelineCachePivotCacheIDs\"\n },\n 0x0822: {\n n: \"BrtTimelineCachePivotCacheID\"\n },\n 0x0823: {\n n: \"BrtBeginTimelineCacheIDs\"\n },\n 0x0824: {\n n: \"BrtEndTimelineCacheIDs\"\n },\n 0x0825: {\n n: \"BrtBeginTimelineCacheID\"\n },\n 0x0826: {\n n: \"BrtEndTimelineCacheID\"\n },\n 0x0827: {\n n: \"BrtBeginTimelinesEx\"\n },\n 0x0828: {\n n: \"BrtEndTimelinesEx\"\n },\n 0x0829: {\n n: \"BrtBeginTimelineEx\"\n },\n 0x082A: {\n n: \"BrtEndTimelineEx\"\n },\n 0x082B: {\n n: \"BrtWorkBookPr15\"\n },\n 0x082C: {\n n: \"BrtPCDH15\"\n },\n 0x082D: {\n n: \"BrtBeginTimelineStyle\"\n },\n 0x082E: {\n n: \"BrtEndTimelineStyle\"\n },\n 0x082F: {\n n: \"BrtTimelineStyleElement\"\n },\n 0x0830: {\n n: \"BrtBeginTimelineStylesheetExt15\"\n },\n 0x0831: {\n n: \"BrtEndTimelineStylesheetExt15\"\n },\n 0x0832: {\n n: \"BrtBeginTimelineStyles\"\n },\n 0x0833: {\n n: \"BrtEndTimelineStyles\"\n },\n 0x0834: {\n n: \"BrtBeginTimelineStyleElements\"\n },\n 0x0835: {\n n: \"BrtEndTimelineStyleElements\"\n },\n 0x0836: {\n n: \"BrtDxf15\"\n },\n 0x0837: {\n n: \"BrtBeginDxfs15\"\n },\n 0x0838: {\n n: \"brtEndDxfs15\"\n },\n 0x0839: {\n n: \"BrtSlicerCacheHideItemsWithNoData\"\n },\n 0x083A: {\n n: \"BrtBeginItemUniqueNames\"\n },\n 0x083B: {\n n: \"BrtEndItemUniqueNames\"\n },\n 0x083C: {\n n: \"BrtItemUniqueName\"\n },\n 0x083D: {\n n: \"BrtBeginExtConn15\"\n },\n 0x083E: {\n n: \"BrtEndExtConn15\"\n },\n 0x083F: {\n n: \"BrtBeginOledbPr15\"\n },\n 0x0840: {\n n: \"BrtEndOledbPr15\"\n },\n 0x0841: {\n n: \"BrtBeginDataFeedPr15\"\n },\n 0x0842: {\n n: \"BrtEndDataFeedPr15\"\n },\n 0x0843: {\n n: \"BrtTextPr15\"\n },\n 0x0844: {\n n: \"BrtRangePr15\"\n },\n 0x0845: {\n n: \"BrtDbCommand15\"\n },\n 0x0846: {\n n: \"BrtBeginDbTables15\"\n },\n 0x0847: {\n n: \"BrtEndDbTables15\"\n },\n 0x0848: {\n n: \"BrtDbTable15\"\n },\n 0x0849: {\n n: \"BrtBeginDataModel\"\n },\n 0x084A: {\n n: \"BrtEndDataModel\"\n },\n 0x084B: {\n n: \"BrtBeginModelTables\"\n },\n 0x084C: {\n n: \"BrtEndModelTables\"\n },\n 0x084D: {\n n: \"BrtModelTable\"\n },\n 0x084E: {\n n: \"BrtBeginModelRelationships\"\n },\n 0x084F: {\n n: \"BrtEndModelRelationships\"\n },\n 0x0850: {\n n: \"BrtModelRelationship\"\n },\n 0x0851: {\n n: \"BrtBeginECTxtWiz15\"\n },\n 0x0852: {\n n: \"BrtEndECTxtWiz15\"\n },\n 0x0853: {\n n: \"BrtBeginECTWFldInfoLst15\"\n },\n 0x0854: {\n n: \"BrtEndECTWFldInfoLst15\"\n },\n 0x0855: {\n n: \"BrtBeginECTWFldInfo15\"\n },\n 0x0856: {\n n: \"BrtFieldListActiveItem\"\n },\n 0x0857: {\n n: \"BrtPivotCacheIdVersion\"\n },\n 0x0858: {\n n: \"BrtSXDI15\"\n },\n 0x0859: {\n n: \"BrtBeginModelTimeGroupings\"\n },\n 0x085A: {\n n: \"BrtEndModelTimeGroupings\"\n },\n 0x085B: {\n n: \"BrtBeginModelTimeGrouping\"\n },\n 0x085C: {\n n: \"BrtEndModelTimeGrouping\"\n },\n 0x085D: {\n n: \"BrtModelTimeGroupingCalcCol\"\n },\n 0x0C00: {\n n: \"BrtUid\"\n },\n 0x0C01: {\n n: \"BrtRevisionPtr\"\n },\n 0x13e7: {\n n: \"BrtBeginCalcFeatures\"\n },\n 0x13e8: {\n n: \"BrtEndCalcFeatures\"\n },\n 0x13e9: {\n n: \"BrtCalcFeature\"\n },\n 0xFFFF: {\n n: \"\"\n }\n };\n var XLSBRE = evert_key(XLSBRecordEnum, 'n');\n /* [MS-XLS] 2.3 Record Enumeration */\n\n var XLSRecordEnum = {\n 0x0003: {\n n: \"BIFF2NUM\",\n f: parse_BIFF2NUM\n },\n 0x0004: {\n n: \"BIFF2STR\",\n f: parse_BIFF2STR\n },\n 0x0006: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0009: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x000a: {\n n: 'EOF',\n f: parsenoop2\n },\n 0x000c: {\n n: \"CalcCount\",\n f: parseuint16\n },\n 0x000d: {\n n: \"CalcMode\",\n f: parseuint16\n },\n 0x000e: {\n n: \"CalcPrecision\",\n f: parsebool\n },\n 0x000f: {\n n: \"CalcRefMode\",\n f: parsebool\n },\n 0x0010: {\n n: \"CalcDelta\",\n f: parse_Xnum\n },\n 0x0011: {\n n: \"CalcIter\",\n f: parsebool\n },\n 0x0012: {\n n: \"Protect\",\n f: parsebool\n },\n 0x0013: {\n n: \"Password\",\n f: parseuint16\n },\n 0x0014: {\n n: \"Header\",\n f: parse_XLHeaderFooter\n },\n 0x0015: {\n n: \"Footer\",\n f: parse_XLHeaderFooter\n },\n 0x0017: {\n n: \"ExternSheet\",\n f: parse_ExternSheet\n },\n 0x0018: {\n n: \"Lbl\",\n f: parse_Lbl\n },\n 0x0019: {\n n: \"WinProtect\",\n f: parsebool\n },\n 0x001a: {\n n: \"VerticalPageBreaks\"\n },\n 0x001b: {\n n: \"HorizontalPageBreaks\"\n },\n 0x001c: {\n n: \"Note\",\n f: parse_Note\n },\n 0x001d: {\n n: \"Selection\"\n },\n 0x0022: {\n n: \"Date1904\",\n f: parsebool\n },\n 0x0023: {\n n: \"ExternName\",\n f: parse_ExternName\n },\n 0x0024: {\n n: \"COLWIDTH\"\n },\n 0x0026: {\n n: \"LeftMargin\",\n f: parse_Xnum\n },\n 0x0027: {\n n: \"RightMargin\",\n f: parse_Xnum\n },\n 0x0028: {\n n: \"TopMargin\",\n f: parse_Xnum\n },\n 0x0029: {\n n: \"BottomMargin\",\n f: parse_Xnum\n },\n 0x002a: {\n n: \"PrintRowCol\",\n f: parsebool\n },\n 0x002b: {\n n: \"PrintGrid\",\n f: parsebool\n },\n 0x002f: {\n n: \"FilePass\",\n f: parse_FilePass\n },\n 0x0031: {\n n: \"Font\",\n f: parse_Font\n },\n 0x0033: {\n n: \"PrintSize\",\n f: parseuint16\n },\n 0x003c: {\n n: \"Continue\"\n },\n 0x003d: {\n n: \"Window1\",\n f: parse_Window1\n },\n 0x0040: {\n n: \"Backup\",\n f: parsebool\n },\n 0x0041: {\n n: \"Pane\",\n f: parse_Pane\n },\n 0x0042: {\n n: 'CodePage',\n f: parseuint16\n },\n 0x004d: {\n n: \"Pls\"\n },\n 0x0050: {\n n: \"DCon\"\n },\n 0x0051: {\n n: \"DConRef\"\n },\n 0x0052: {\n n: \"DConName\"\n },\n 0x0055: {\n n: \"DefColWidth\",\n f: parseuint16\n },\n 0x0059: {\n n: \"XCT\"\n },\n 0x005a: {\n n: \"CRN\"\n },\n 0x005b: {\n n: \"FileSharing\"\n },\n 0x005c: {\n n: 'WriteAccess',\n f: parse_WriteAccess\n },\n 0x005d: {\n n: \"Obj\",\n f: parse_Obj\n },\n 0x005e: {\n n: \"Uncalced\"\n },\n 0x005f: {\n n: \"CalcSaveRecalc\",\n f: parsebool\n },\n 0x0060: {\n n: \"Template\"\n },\n 0x0061: {\n n: \"Intl\"\n },\n 0x0063: {\n n: \"ObjProtect\",\n f: parsebool\n },\n 0x007d: {\n n: \"ColInfo\",\n f: parse_ColInfo\n },\n 0x0080: {\n n: \"Guts\",\n f: parse_Guts\n },\n 0x0081: {\n n: \"WsBool\",\n f: parse_WsBool\n },\n 0x0082: {\n n: \"GridSet\",\n f: parseuint16\n },\n 0x0083: {\n n: \"HCenter\",\n f: parsebool\n },\n 0x0084: {\n n: \"VCenter\",\n f: parsebool\n },\n 0x0085: {\n n: 'BoundSheet8',\n f: parse_BoundSheet8\n },\n 0x0086: {\n n: \"WriteProtect\"\n },\n 0x008c: {\n n: \"Country\",\n f: parse_Country\n },\n 0x008d: {\n n: \"HideObj\",\n f: parseuint16\n },\n 0x0090: {\n n: \"Sort\"\n },\n 0x0092: {\n n: \"Palette\",\n f: parse_Palette\n },\n 0x0097: {\n n: \"Sync\"\n },\n 0x0098: {\n n: \"LPr\"\n },\n 0x0099: {\n n: \"DxGCol\"\n },\n 0x009a: {\n n: \"FnGroupName\"\n },\n 0x009b: {\n n: \"FilterMode\"\n },\n 0x009c: {\n n: \"BuiltInFnGroupCount\",\n f: parseuint16\n },\n 0x009d: {\n n: \"AutoFilterInfo\"\n },\n 0x009e: {\n n: \"AutoFilter\"\n },\n 0x00a0: {\n n: \"Scl\",\n f: parse_Scl\n },\n 0x00a1: {\n n: \"Setup\",\n f: parse_Setup\n },\n 0x00ae: {\n n: \"ScenMan\"\n },\n 0x00af: {\n n: \"SCENARIO\"\n },\n 0x00b0: {\n n: \"SxView\"\n },\n 0x00b1: {\n n: \"Sxvd\"\n },\n 0x00b2: {\n n: \"SXVI\"\n },\n 0x00b4: {\n n: \"SxIvd\"\n },\n 0x00b5: {\n n: \"SXLI\"\n },\n 0x00b6: {\n n: \"SXPI\"\n },\n 0x00b8: {\n n: \"DocRoute\"\n },\n 0x00b9: {\n n: \"RecipName\"\n },\n 0x00bd: {\n n: \"MulRk\",\n f: parse_MulRk\n },\n 0x00be: {\n n: \"MulBlank\",\n f: parse_MulBlank\n },\n 0x00c1: {\n n: 'Mms',\n f: parsenoop2\n },\n 0x00c5: {\n n: \"SXDI\"\n },\n 0x00c6: {\n n: \"SXDB\"\n },\n 0x00c7: {\n n: \"SXFDB\"\n },\n 0x00c8: {\n n: \"SXDBB\"\n },\n 0x00c9: {\n n: \"SXNum\"\n },\n 0x00ca: {\n n: \"SxBool\",\n f: parsebool\n },\n 0x00cb: {\n n: \"SxErr\"\n },\n 0x00cc: {\n n: \"SXInt\"\n },\n 0x00cd: {\n n: \"SXString\"\n },\n 0x00ce: {\n n: \"SXDtr\"\n },\n 0x00cf: {\n n: \"SxNil\"\n },\n 0x00d0: {\n n: \"SXTbl\"\n },\n 0x00d1: {\n n: \"SXTBRGIITM\"\n },\n 0x00d2: {\n n: \"SxTbpg\"\n },\n 0x00d3: {\n n: \"ObProj\"\n },\n 0x00d5: {\n n: \"SXStreamID\"\n },\n 0x00d7: {\n n: \"DBCell\"\n },\n 0x00d8: {\n n: \"SXRng\"\n },\n 0x00d9: {\n n: \"SxIsxoper\"\n },\n 0x00da: {\n n: \"BookBool\",\n f: parseuint16\n },\n 0x00dc: {\n n: \"DbOrParamQry\"\n },\n 0x00dd: {\n n: \"ScenarioProtect\",\n f: parsebool\n },\n 0x00de: {\n n: \"OleObjectSize\"\n },\n 0x00e0: {\n n: \"XF\",\n f: parse_XF\n },\n 0x00e1: {\n n: 'InterfaceHdr',\n f: parse_InterfaceHdr\n },\n 0x00e2: {\n n: 'InterfaceEnd',\n f: parsenoop2\n },\n 0x00e3: {\n n: \"SXVS\"\n },\n 0x00e5: {\n n: \"MergeCells\",\n f: parse_MergeCells\n },\n 0x00e9: {\n n: \"BkHim\"\n },\n 0x00eb: {\n n: \"MsoDrawingGroup\"\n },\n 0x00ec: {\n n: \"MsoDrawing\"\n },\n 0x00ed: {\n n: \"MsoDrawingSelection\"\n },\n 0x00ef: {\n n: \"PhoneticInfo\"\n },\n 0x00f0: {\n n: \"SxRule\"\n },\n 0x00f1: {\n n: \"SXEx\"\n },\n 0x00f2: {\n n: \"SxFilt\"\n },\n 0x00f4: {\n n: \"SxDXF\"\n },\n 0x00f5: {\n n: \"SxItm\"\n },\n 0x00f6: {\n n: \"SxName\"\n },\n 0x00f7: {\n n: \"SxSelect\"\n },\n 0x00f8: {\n n: \"SXPair\"\n },\n 0x00f9: {\n n: \"SxFmla\"\n },\n 0x00fb: {\n n: \"SxFormat\"\n },\n 0x00fc: {\n n: \"SST\",\n f: parse_SST\n },\n 0x00fd: {\n n: \"LabelSst\",\n f: parse_LabelSst\n },\n 0x00ff: {\n n: \"ExtSST\",\n f: parse_ExtSST\n },\n 0x0100: {\n n: \"SXVDEx\"\n },\n 0x0103: {\n n: \"SXFormula\"\n },\n 0x0122: {\n n: \"SXDBEx\"\n },\n 0x0137: {\n n: \"RRDInsDel\"\n },\n 0x0138: {\n n: \"RRDHead\"\n },\n 0x013b: {\n n: \"RRDChgCell\"\n },\n 0x013d: {\n n: \"RRTabId\",\n f: parseuint16a\n },\n 0x013e: {\n n: \"RRDRenSheet\"\n },\n 0x013f: {\n n: \"RRSort\"\n },\n 0x0140: {\n n: \"RRDMove\"\n },\n 0x014a: {\n n: \"RRFormat\"\n },\n 0x014b: {\n n: \"RRAutoFmt\"\n },\n 0x014d: {\n n: \"RRInsertSh\"\n },\n 0x014e: {\n n: \"RRDMoveBegin\"\n },\n 0x014f: {\n n: \"RRDMoveEnd\"\n },\n 0x0150: {\n n: \"RRDInsDelBegin\"\n },\n 0x0151: {\n n: \"RRDInsDelEnd\"\n },\n 0x0152: {\n n: \"RRDConflict\"\n },\n 0x0153: {\n n: \"RRDDefName\"\n },\n 0x0154: {\n n: \"RRDRstEtxp\"\n },\n 0x015f: {\n n: \"LRng\"\n },\n 0x0160: {\n n: \"UsesELFs\",\n f: parsebool\n },\n 0x0161: {\n n: \"DSF\",\n f: parsenoop2\n },\n 0x0191: {\n n: \"CUsr\"\n },\n 0x0192: {\n n: \"CbUsr\"\n },\n 0x0193: {\n n: \"UsrInfo\"\n },\n 0x0194: {\n n: \"UsrExcl\"\n },\n 0x0195: {\n n: \"FileLock\"\n },\n 0x0196: {\n n: \"RRDInfo\"\n },\n 0x0197: {\n n: \"BCUsrs\"\n },\n 0x0198: {\n n: \"UsrChk\"\n },\n 0x01a9: {\n n: \"UserBView\"\n },\n 0x01aa: {\n n: \"UserSViewBegin\"\n },\n 0x01ab: {\n n: \"UserSViewEnd\"\n },\n 0x01ac: {\n n: \"RRDUserView\"\n },\n 0x01ad: {\n n: \"Qsi\"\n },\n 0x01ae: {\n n: \"SupBook\",\n f: parse_SupBook\n },\n 0x01af: {\n n: \"Prot4Rev\",\n f: parsebool\n },\n 0x01b0: {\n n: \"CondFmt\"\n },\n 0x01b1: {\n n: \"CF\"\n },\n 0x01b2: {\n n: \"DVal\"\n },\n 0x01b5: {\n n: \"DConBin\"\n },\n 0x01b6: {\n n: \"TxO\",\n f: parse_TxO\n },\n 0x01b7: {\n n: \"RefreshAll\",\n f: parsebool\n },\n 0x01b8: {\n n: \"HLink\",\n f: parse_HLink\n },\n 0x01b9: {\n n: \"Lel\"\n },\n 0x01ba: {\n n: \"CodeName\",\n f: parse_XLUnicodeString\n },\n 0x01bb: {\n n: \"SXFDBType\"\n },\n 0x01bc: {\n n: \"Prot4RevPass\",\n f: parseuint16\n },\n 0x01bd: {\n n: \"ObNoMacros\"\n },\n 0x01be: {\n n: \"Dv\"\n },\n 0x01c0: {\n n: \"Excel9File\",\n f: parsenoop2\n },\n 0x01c1: {\n n: \"RecalcId\",\n f: parse_RecalcId,\n r: 2\n },\n 0x01c2: {\n n: \"EntExU2\",\n f: parsenoop2\n },\n 0x0200: {\n n: \"Dimensions\",\n f: parse_Dimensions\n },\n 0x0201: {\n n: \"Blank\",\n f: parse_Blank\n },\n 0x0203: {\n n: \"Number\",\n f: parse_Number\n },\n 0x0204: {\n n: \"Label\",\n f: parse_Label\n },\n 0x0205: {\n n: \"BoolErr\",\n f: parse_BoolErr\n },\n 0x0206: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0207: {\n n: \"String\",\n f: parse_String\n },\n 0x0208: {\n n: 'Row',\n f: parse_Row\n },\n 0x020b: {\n n: \"Index\"\n },\n 0x0221: {\n n: \"Array\",\n f: parse_Array\n },\n 0x0225: {\n n: \"DefaultRowHeight\",\n f: parse_DefaultRowHeight\n },\n 0x0236: {\n n: \"Table\"\n },\n 0x023e: {\n n: \"Window2\",\n f: parse_Window2\n },\n 0x027e: {\n n: \"RK\",\n f: parse_RK\n },\n 0x0293: {\n n: \"Style\"\n },\n 0x0406: {\n n: \"Formula\",\n f: parse_Formula\n },\n 0x0418: {\n n: \"BigName\"\n },\n 0x041e: {\n n: \"Format\",\n f: parse_Format\n },\n 0x043c: {\n n: \"ContinueBigName\"\n },\n 0x04bc: {\n n: \"ShrFmla\",\n f: parse_ShrFmla\n },\n 0x0800: {\n n: \"HLinkTooltip\",\n f: parse_HLinkTooltip\n },\n 0x0801: {\n n: \"WebPub\"\n },\n 0x0802: {\n n: \"QsiSXTag\"\n },\n 0x0803: {\n n: \"DBQueryExt\"\n },\n 0x0804: {\n n: \"ExtString\"\n },\n 0x0805: {\n n: \"TxtQry\"\n },\n 0x0806: {\n n: \"Qsir\"\n },\n 0x0807: {\n n: \"Qsif\"\n },\n 0x0808: {\n n: \"RRDTQSIF\"\n },\n 0x0809: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x080a: {\n n: \"OleDbConn\"\n },\n 0x080b: {\n n: \"WOpt\"\n },\n 0x080c: {\n n: \"SXViewEx\"\n },\n 0x080d: {\n n: \"SXTH\"\n },\n 0x080e: {\n n: \"SXPIEx\"\n },\n 0x080f: {\n n: \"SXVDTEx\"\n },\n 0x0810: {\n n: \"SXViewEx9\"\n },\n 0x0812: {\n n: \"ContinueFrt\"\n },\n 0x0813: {\n n: \"RealTimeData\"\n },\n 0x0850: {\n n: \"ChartFrtInfo\"\n },\n 0x0851: {\n n: \"FrtWrapper\"\n },\n 0x0852: {\n n: \"StartBlock\"\n },\n 0x0853: {\n n: \"EndBlock\"\n },\n 0x0854: {\n n: \"StartObject\"\n },\n 0x0855: {\n n: \"EndObject\"\n },\n 0x0856: {\n n: \"CatLab\"\n },\n 0x0857: {\n n: \"YMult\"\n },\n 0x0858: {\n n: \"SXViewLink\"\n },\n 0x0859: {\n n: \"PivotChartBits\"\n },\n 0x085a: {\n n: \"FrtFontList\"\n },\n 0x0862: {\n n: \"SheetExt\"\n },\n 0x0863: {\n n: \"BookExt\",\n r: 12\n },\n 0x0864: {\n n: \"SXAddl\"\n },\n 0x0865: {\n n: \"CrErr\"\n },\n 0x0866: {\n n: \"HFPicture\"\n },\n 0x0867: {\n n: 'FeatHdr',\n f: parsenoop2\n },\n 0x0868: {\n n: \"Feat\"\n },\n 0x086a: {\n n: \"DataLabExt\"\n },\n 0x086b: {\n n: \"DataLabExtContents\"\n },\n 0x086c: {\n n: \"CellWatch\"\n },\n 0x0871: {\n n: \"FeatHdr11\"\n },\n 0x0872: {\n n: \"Feature11\"\n },\n 0x0874: {\n n: \"DropDownObjIds\"\n },\n 0x0875: {\n n: \"ContinueFrt11\"\n },\n 0x0876: {\n n: \"DConn\"\n },\n 0x0877: {\n n: \"List12\"\n },\n 0x0878: {\n n: \"Feature12\"\n },\n 0x0879: {\n n: \"CondFmt12\"\n },\n 0x087a: {\n n: \"CF12\"\n },\n 0x087b: {\n n: \"CFEx\"\n },\n 0x087c: {\n n: \"XFCRC\",\n f: parse_XFCRC,\n r: 12\n },\n 0x087d: {\n n: \"XFExt\",\n f: parse_XFExt,\n r: 12\n },\n 0x087e: {\n n: \"AutoFilter12\"\n },\n 0x087f: {\n n: \"ContinueFrt12\"\n },\n 0x0884: {\n n: \"MDTInfo\"\n },\n 0x0885: {\n n: \"MDXStr\"\n },\n 0x0886: {\n n: \"MDXTuple\"\n },\n 0x0887: {\n n: \"MDXSet\"\n },\n 0x0888: {\n n: \"MDXProp\"\n },\n 0x0889: {\n n: \"MDXKPI\"\n },\n 0x088a: {\n n: \"MDB\"\n },\n 0x088b: {\n n: \"PLV\"\n },\n 0x088c: {\n n: \"Compat12\",\n f: parsebool,\n r: 12\n },\n 0x088d: {\n n: \"DXF\"\n },\n 0x088e: {\n n: \"TableStyles\",\n r: 12\n },\n 0x088f: {\n n: \"TableStyle\"\n },\n 0x0890: {\n n: \"TableStyleElement\"\n },\n 0x0892: {\n n: \"StyleExt\"\n },\n 0x0893: {\n n: \"NamePublish\"\n },\n 0x0894: {\n n: \"NameCmt\",\n f: parse_NameCmt,\n r: 12\n },\n 0x0895: {\n n: \"SortData\"\n },\n 0x0896: {\n n: \"Theme\",\n f: parse_Theme,\n r: 12\n },\n 0x0897: {\n n: \"GUIDTypeLib\"\n },\n 0x0898: {\n n: \"FnGrp12\"\n },\n 0x0899: {\n n: \"NameFnGrp12\"\n },\n 0x089a: {\n n: \"MTRSettings\",\n f: parse_MTRSettings,\n r: 12\n },\n 0x089b: {\n n: \"CompressPictures\",\n f: parsenoop2\n },\n 0x089c: {\n n: \"HeaderFooter\"\n },\n 0x089d: {\n n: \"CrtLayout12\"\n },\n 0x089e: {\n n: \"CrtMlFrt\"\n },\n 0x089f: {\n n: \"CrtMlFrtContinue\"\n },\n 0x08a3: {\n n: \"ForceFullCalculation\",\n f: parse_ForceFullCalculation\n },\n 0x08a4: {\n n: \"ShapePropsStream\"\n },\n 0x08a5: {\n n: \"TextPropsStream\"\n },\n 0x08a6: {\n n: \"RichTextStream\"\n },\n 0x08a7: {\n n: \"CrtLayout12A\"\n },\n 0x1001: {\n n: \"Units\"\n },\n 0x1002: {\n n: \"Chart\"\n },\n 0x1003: {\n n: \"Series\"\n },\n 0x1006: {\n n: \"DataFormat\"\n },\n 0x1007: {\n n: \"LineFormat\"\n },\n 0x1009: {\n n: \"MarkerFormat\"\n },\n 0x100a: {\n n: \"AreaFormat\"\n },\n 0x100b: {\n n: \"PieFormat\"\n },\n 0x100c: {\n n: \"AttachedLabel\"\n },\n 0x100d: {\n n: \"SeriesText\"\n },\n 0x1014: {\n n: \"ChartFormat\"\n },\n 0x1015: {\n n: \"Legend\"\n },\n 0x1016: {\n n: \"SeriesList\"\n },\n 0x1017: {\n n: \"Bar\"\n },\n 0x1018: {\n n: \"Line\"\n },\n 0x1019: {\n n: \"Pie\"\n },\n 0x101a: {\n n: \"Area\"\n },\n 0x101b: {\n n: \"Scatter\"\n },\n 0x101c: {\n n: \"CrtLine\"\n },\n 0x101d: {\n n: \"Axis\"\n },\n 0x101e: {\n n: \"Tick\"\n },\n 0x101f: {\n n: \"ValueRange\"\n },\n 0x1020: {\n n: \"CatSerRange\"\n },\n 0x1021: {\n n: \"AxisLine\"\n },\n 0x1022: {\n n: \"CrtLink\"\n },\n 0x1024: {\n n: \"DefaultText\"\n },\n 0x1025: {\n n: \"Text\"\n },\n 0x1026: {\n n: \"FontX\",\n f: parseuint16\n },\n 0x1027: {\n n: \"ObjectLink\"\n },\n 0x1032: {\n n: \"Frame\"\n },\n 0x1033: {\n n: \"Begin\"\n },\n 0x1034: {\n n: \"End\"\n },\n 0x1035: {\n n: \"PlotArea\"\n },\n 0x103a: {\n n: \"Chart3d\"\n },\n 0x103c: {\n n: \"PicF\"\n },\n 0x103d: {\n n: \"DropBar\"\n },\n 0x103e: {\n n: \"Radar\"\n },\n 0x103f: {\n n: \"Surf\"\n },\n 0x1040: {\n n: \"RadarArea\"\n },\n 0x1041: {\n n: \"AxisParent\"\n },\n 0x1043: {\n n: \"LegendException\"\n },\n 0x1044: {\n n: \"ShtProps\",\n f: parse_ShtProps\n },\n 0x1045: {\n n: \"SerToCrt\"\n },\n 0x1046: {\n n: \"AxesUsed\"\n },\n 0x1048: {\n n: \"SBaseRef\"\n },\n 0x104a: {\n n: \"SerParent\"\n },\n 0x104b: {\n n: \"SerAuxTrend\"\n },\n 0x104e: {\n n: \"IFmtRecord\"\n },\n 0x104f: {\n n: \"Pos\"\n },\n 0x1050: {\n n: \"AlRuns\"\n },\n 0x1051: {\n n: \"BRAI\"\n },\n 0x105b: {\n n: \"SerAuxErrBar\"\n },\n 0x105c: {\n n: \"ClrtClient\",\n f: parse_ClrtClient\n },\n 0x105d: {\n n: \"SerFmt\"\n },\n 0x105f: {\n n: \"Chart3DBarShape\"\n },\n 0x1060: {\n n: \"Fbi\"\n },\n 0x1061: {\n n: \"BopPop\"\n },\n 0x1062: {\n n: \"AxcExt\"\n },\n 0x1063: {\n n: \"Dat\"\n },\n 0x1064: {\n n: \"PlotGrowth\"\n },\n 0x1065: {\n n: \"SIIndex\"\n },\n 0x1066: {\n n: \"GelFrame\"\n },\n 0x1067: {\n n: \"BopPopCustom\"\n },\n 0x1068: {\n n: \"Fbi2\"\n },\n 0x0000: {\n n: \"Dimensions\",\n f: parse_Dimensions\n },\n 0x0002: {\n n: \"BIFF2INT\",\n f: parse_BIFF2INT\n },\n 0x0005: {\n n: \"BoolErr\",\n f: parse_BoolErr\n },\n 0x0007: {\n n: \"String\",\n f: parse_BIFF2STRING\n },\n 0x0008: {\n n: \"BIFF2ROW\"\n },\n 0x000b: {\n n: \"Index\"\n },\n 0x0016: {\n n: \"ExternCount\",\n f: parseuint16\n },\n 0x001e: {\n n: \"BIFF2FORMAT\",\n f: parse_BIFF2Format\n },\n 0x001f: {\n n: \"BIFF2FMTCNT\"\n },\n\n /* 16-bit cnt of BIFF2FORMAT records */\n 0x0020: {\n n: \"BIFF2COLINFO\"\n },\n 0x0021: {\n n: \"Array\",\n f: parse_Array\n },\n 0x0025: {\n n: \"DefaultRowHeight\",\n f: parse_DefaultRowHeight\n },\n 0x0032: {\n n: \"BIFF2FONTXTRA\",\n f: parse_BIFF2FONTXTRA\n },\n 0x0034: {\n n: \"DDEObjName\"\n },\n 0x003e: {\n n: \"BIFF2WINDOW2\"\n },\n 0x0043: {\n n: \"BIFF2XF\"\n },\n 0x0045: {\n n: \"BIFF2FONTCLR\"\n },\n 0x0056: {\n n: \"BIFF4FMTCNT\"\n },\n\n /* 16-bit cnt, similar to BIFF2 */\n 0x007e: {\n n: \"RK\"\n },\n\n /* Not necessarily same as 0x027e */\n 0x007f: {\n n: \"ImData\",\n f: parse_ImData\n },\n 0x0087: {\n n: \"Addin\"\n },\n 0x0088: {\n n: \"Edg\"\n },\n 0x0089: {\n n: \"Pub\"\n },\n 0x0091: {\n n: \"Sub\"\n },\n 0x0094: {\n n: \"LHRecord\"\n },\n 0x0095: {\n n: \"LHNGraph\"\n },\n 0x0096: {\n n: \"Sound\"\n },\n 0x00a9: {\n n: \"CoordList\"\n },\n 0x00ab: {\n n: \"GCW\"\n },\n 0x00bc: {\n n: \"ShrFmla\"\n },\n\n /* Not necessarily same as 0x04bc */\n 0x00bf: {\n n: \"ToolbarHdr\"\n },\n 0x00c0: {\n n: \"ToolbarEnd\"\n },\n 0x00c2: {\n n: \"AddMenu\"\n },\n 0x00c3: {\n n: \"DelMenu\"\n },\n 0x00d6: {\n n: \"RString\",\n f: parse_RString\n },\n 0x00df: {\n n: \"UDDesc\"\n },\n 0x00ea: {\n n: \"TabIdConf\"\n },\n 0x0162: {\n n: \"XL5Modify\"\n },\n 0x01a5: {\n n: \"FileSharing2\"\n },\n 0x0209: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x0218: {\n n: \"Lbl\",\n f: parse_Lbl\n },\n 0x0223: {\n n: \"ExternName\",\n f: parse_ExternName\n },\n 0x0231: {\n n: \"Font\"\n },\n 0x0243: {\n n: \"BIFF3XF\"\n },\n 0x0409: {\n n: 'BOF',\n f: parse_BOF\n },\n 0x0443: {\n n: \"BIFF4XF\"\n },\n 0x086d: {\n n: \"FeatInfo\"\n },\n 0x0873: {\n n: \"FeatInfo11\"\n },\n 0x0881: {\n n: \"SXAddl12\"\n },\n 0x08c0: {\n n: \"AutoWebPub\"\n },\n 0x08c1: {\n n: \"ListObj\"\n },\n 0x08c2: {\n n: \"ListField\"\n },\n 0x08c3: {\n n: \"ListDV\"\n },\n 0x08c4: {\n n: \"ListCondFmt\"\n },\n 0x08c5: {\n n: \"ListCF\"\n },\n 0x08c6: {\n n: \"FMQry\"\n },\n 0x08c7: {\n n: \"FMSQry\"\n },\n 0x08c8: {\n n: \"PLV\"\n },\n 0x08c9: {\n n: \"LnExt\"\n },\n 0x08ca: {\n n: \"MkrExt\"\n },\n 0x08cb: {\n n: \"CrtCoopt\"\n },\n 0x08d6: {\n n: \"FRTArchId$\",\n r: 12\n },\n 0x7262: {}\n };\n var XLSRE = evert_key(XLSRecordEnum, 'n');\n\n function write_biff_rec(ba, type, payload, length) {\n var t = +type || +XLSRE[type];\n if (isNaN(t)) return;\n var len = length || (payload || []).length || 0;\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, len);\n if (len > 0 && is_buf(payload)) ba.push(payload);\n }\n\n function write_biff_continue(ba, type, payload, length) {\n var len = length || (payload || []).length || 0;\n if (len <= 8224) return write_biff_rec(ba, type, payload, len);\n var t = +type || +XLSRE[type];\n if (isNaN(t)) return;\n var parts = payload.parts || [],\n sidx = 0;\n var i = 0,\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n\n while (i < len) {\n o = ba.next(4);\n o.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n }\n }\n\n function write_BIFF2Cell(out, r, c) {\n if (!out) out = new_buf(7);\n out.write_shift(2, r);\n out.write_shift(2, c);\n out.write_shift(2, 0);\n out.write_shift(1, 0);\n return out;\n }\n\n function write_BIFF2BERR(r, c, val, t) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n\n if (t == 'e') {\n out.write_shift(1, val);\n out.write_shift(1, 1);\n } else {\n out.write_shift(1, val ? 1 : 0);\n out.write_shift(1, 0);\n }\n\n return out;\n }\n /* TODO: codepage, large strings */\n\n\n function write_BIFF2LABEL(r, c, val) {\n var out = new_buf(8 + 2 * val.length);\n write_BIFF2Cell(out, r, c);\n out.write_shift(1, val.length);\n out.write_shift(val.length, val, 'sbcs');\n return out.l < out.length ? out.slice(0, out.l) : out;\n }\n\n function write_ws_biff2_cell(ba, cell, R, C) {\n if (cell.v != null) switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n if (v == (v | 0) && v >= 0 && v < 65536) write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));else write_biff_rec(ba, 0x0003, write_BIFF2NUM(R, C, v));\n return;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t));\n return;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v));\n return;\n }\n write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n }\n\n function write_ws_biff2(ba, ws, idx, opts) {\n var dense = Array.isArray(ws);\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref,\n rr = \"\",\n cols = [];\n\n if (range.e.c > 0xFF || range.e.r > 0x3FFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, 0x3FFF);\n ref = encode_range(range);\n }\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff2_cell(ba, cell, R, C, opts);\n }\n }\n }\n /* Based on test files */\n\n\n function write_biff2_buf(wb, opts) {\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ba = buf_array();\n var idx = 0;\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n if (wb.SheetNames[i] == o.sheet) idx = i;\n }\n\n if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n write_biff_rec(ba, 0x0009, write_BOF(wb, 0x10, o));\n /* ... */\n\n write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n /* ... */\n\n write_biff_rec(ba, 0x000A);\n return ba.end();\n }\n\n function write_FONTS_biff8(ba, data, opts) {\n write_biff_rec(ba, \"Font\", write_Font({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Arial\",\n family: 2,\n scheme: \"minor\"\n }, opts));\n }\n\n function write_FMTS_biff8(ba, NF, opts) {\n if (!NF) return;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_biff_rec(ba, \"Format\", write_Format(i, NF[i], opts));\n }\n });\n }\n\n function write_FEAT(ba, ws) {\n /* [MS-XLS] 2.4.112 */\n var o = new_buf(19);\n o.write_shift(4, 0x867);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 1);\n o.write_shift(4, 0);\n write_biff_rec(ba, \"FeatHdr\", o);\n /* [MS-XLS] 2.4.111 */\n\n o = new_buf(39);\n o.write_shift(4, 0x868);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 1);\n o.write_shift(4, 4);\n o.write_shift(2, 0);\n write_Ref8U(safe_decode_range(ws['!ref'] || \"A1\"), o);\n o.write_shift(4, 4);\n write_biff_rec(ba, \"Feat\", o);\n }\n\n function write_CELLXFS_biff8(ba, opts) {\n for (var i = 0; i < 16; ++i) {\n write_biff_rec(ba, \"XF\", write_XF({\n numFmtId: 0,\n style: true\n }, 0, opts));\n }\n\n opts.cellXfs.forEach(function (c) {\n write_biff_rec(ba, \"XF\", write_XF(c, 0, opts));\n });\n }\n\n function write_ws_biff8_hlinks(ba, ws) {\n for (var R = 0; R < ws['!links'].length; ++R) {\n var HL = ws['!links'][R];\n write_biff_rec(ba, \"HLink\", write_HLink(HL));\n if (HL[1].Tooltip) write_biff_rec(ba, \"HLinkTooltip\", write_HLinkTooltip(HL));\n }\n\n delete ws['!links'];\n }\n\n function write_ws_biff8_cell(ba, cell, R, C, opts) {\n var os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\n if (cell.v == null && !cell.bf) {\n write_biff_rec(ba, \"Blank\", write_XLSCell(R, C, os));\n return;\n }\n\n if (cell.bf) write_biff_rec(ba, \"Formula\", write_Formula(cell, R, C, opts, os));else switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n /* TODO: emit RK as appropriate */\n\n write_biff_rec(ba, \"Number\", write_Number(R, C, v, os, opts));\n break;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0205, write_BoolErr(R, C, cell.v, os, opts, cell.t));\n break;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n if (opts.bookSST) {\n var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n write_biff_rec(ba, \"LabelSst\", write_LabelSst(R, C, isst, os, opts));\n } else write_biff_rec(ba, \"Label\", write_Label(R, C, cell.v, os, opts));\n\n break;\n\n default:\n write_biff_rec(ba, \"Blank\", write_XLSCell(R, C, os));\n }\n }\n /* [MS-XLS] 2.1.7.20.5 */\n\n\n function write_ws_biff8(idx, opts, wb) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n\n var _WB = (wb || {}).Workbook || {};\n\n var _sheet = (_WB.Sheets || [])[idx] || {};\n\n var dense = Array.isArray(ws);\n var b8 = opts.biff == 8;\n var ref,\n rr = \"\",\n cols = [];\n var range = safe_decode_range(ws['!ref'] || \"A1\");\n var MAX_ROWS = b8 ? 65536 : 16384;\n\n if (range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, MAX_ROWS - 1);\n }\n\n write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n /* [Uncalced] Index */\n\n write_biff_rec(ba, \"CalcMode\", writeuint16(1));\n write_biff_rec(ba, \"CalcCount\", writeuint16(100));\n write_biff_rec(ba, \"CalcRefMode\", writebool(true));\n write_biff_rec(ba, \"CalcIter\", writebool(false));\n write_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n write_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n write_biff_rec(ba, \"PrintRowCol\", writebool(false));\n write_biff_rec(ba, \"PrintGrid\", writebool(false));\n write_biff_rec(ba, \"GridSet\", writeuint16(1));\n write_biff_rec(ba, \"Guts\", write_Guts([0, 0]));\n /* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\n /* Header (string) */\n\n /* Footer (string) */\n\n write_biff_rec(ba, \"HCenter\", writebool(false));\n write_biff_rec(ba, \"VCenter\", writebool(false));\n /* ... */\n\n write_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n /* ... */\n\n if (b8) ws['!links'] = [];\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff8_cell(ba, cell, R, C, opts);\n if (b8 && cell.l) ws['!links'].push([ref, cell.l]);\n }\n }\n\n var cname = _sheet.CodeName || _sheet.name || s;\n /* ... */\n\n if (b8) write_biff_rec(ba, \"Window2\", write_Window2((_WB.Views || [])[0]));\n /* ... */\n\n if (b8 && (ws['!merges'] || []).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n /* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\n if (b8) write_ws_biff8_hlinks(ba, ws);\n /* [DVAL] */\n\n write_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n /* *WebPub *CellWatch [SheetExt] */\n\n if (b8) write_FEAT(ba, ws);\n /* *FEAT11 *RECORD12 */\n\n write_biff_rec(ba, \"EOF\");\n return ba.end();\n }\n /* [MS-XLS] 2.1.7.20.3 */\n\n\n function write_biff8_global(wb, bufs, opts) {\n var A = buf_array();\n\n var _WB = (wb || {}).Workbook || {};\n\n var _sheets = _WB.Sheets || [];\n\n var _wb = _WB.WBProps || {};\n\n var b8 = opts.biff == 8,\n b5 = opts.biff == 5;\n write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n if (opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n write_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n write_biff_rec(A, \"Mms\", writezeroes(2));\n if (b5) write_biff_rec(A, \"ToolbarHdr\");\n if (b5) write_biff_rec(A, \"ToolbarEnd\");\n write_biff_rec(A, \"InterfaceEnd\");\n write_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n /* [FileSharing] */\n\n write_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n /* *2047 Lel */\n\n if (b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n if (b8) write_biff_rec(A, \"Excel9File\");\n write_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n if (b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n /* [ObNoMacros] */\n\n if (b8 && wb.vbaraw) {\n var cname = _wb.CodeName || \"ThisWorkbook\";\n write_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n }\n\n write_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n /* *FnGroupName *FnGrp12 */\n\n /* *Lbl */\n\n /* [OleObjectSize] */\n\n write_biff_rec(A, \"WinProtect\", writebool(false));\n write_biff_rec(A, \"Protect\", writebool(false));\n write_biff_rec(A, \"Password\", writeuint16(0));\n if (b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n if (b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n write_biff_rec(A, \"Window1\", write_Window1(opts));\n write_biff_rec(A, \"Backup\", writebool(false));\n write_biff_rec(A, \"HideObj\", writeuint16(0));\n write_biff_rec(A, \"Date1904\", writebool(safe1904(wb) == \"true\"));\n write_biff_rec(A, \"CalcPrecision\", writebool(true));\n if (b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n write_biff_rec(A, \"BookBool\", writeuint16(0));\n /* ... */\n\n write_FONTS_biff8(A, wb, opts);\n write_FMTS_biff8(A, wb.SSF, opts);\n write_CELLXFS_biff8(A, opts);\n /* ... */\n\n if (b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n var a = A.end();\n var C = buf_array();\n /* METADATA [MTRSettings] [ForceFullCalculation] */\n\n if (b8) write_biff_rec(C, \"Country\", write_Country());\n /* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n /* BIFF8: [SST *Continue] ExtSST */\n\n if (b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n /* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\n write_biff_rec(C, \"EOF\");\n var c = C.end();\n var B = buf_array();\n var blen = 0,\n j = 0;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n }\n\n var start = a.length + blen + c.length;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n var _sheet = _sheets[j] || {};\n\n write_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({\n pos: start,\n hs: _sheet.Hidden || 0,\n dt: 0,\n name: wb.SheetNames[j]\n }, opts));\n start += bufs[j].length;\n }\n /* 1*BoundSheet8 */\n\n\n var b = B.end();\n if (blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n var out = [];\n if (a.length) out.push(a);\n if (b.length) out.push(b);\n if (c.length) out.push(c);\n return __toBuffer([out]);\n }\n /* [MS-XLS] 2.1.7.20 Workbook Stream */\n\n\n function write_biff8_buf(wb, opts) {\n var o = opts || {};\n var bufs = [];\n\n if (wb && !wb.SSF) {\n wb.SSF = SSF.get_table();\n }\n\n if (wb && wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n o.revssf = evert_num(wb.SSF);\n o.revssf[wb.SSF[65535]] = 0;\n o.ssf = wb.SSF;\n }\n\n o.Strings = [];\n o.Strings.Count = 0;\n o.Strings.Unique = 0;\n fix_write_opts(o);\n o.cellXfs = [];\n get_cell_style(o.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n bufs[bufs.length] = write_ws_biff8(i, o, wb);\n }\n\n bufs.unshift(write_biff8_global(wb, bufs, o));\n return __toBuffer([bufs]);\n }\n\n function write_biff_buf(wb, opts) {\n var o = opts || {};\n\n switch (o.biff || 2) {\n case 8:\n case 5:\n return write_biff8_buf(wb, opts);\n\n case 4:\n case 3:\n case 2:\n return write_biff2_buf(wb, opts);\n }\n\n throw new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n }\n /* note: browser DOM element cannot see mso- style attrs, must parse */\n\n\n var HTML_ = function () {\n function html_to_sheet(str, _opts) {\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var ws = opts.dense ? [] : {};\n str = str.replace(//g, \"\");\n var mtch = str.match(/\");\n var mtch2 = str.match(/<\\/table/i);\n var i = mtch.index,\n j = mtch2 && mtch2.index || str.length;\n var rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"
\");\n var R = -1,\n C = 0,\n RS = 0,\n CS = 0;\n var range = {\n s: {\n r: 10000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var merges = [];\n\n for (i = 0; i < rows.length; ++i) {\n var row = rows[i].trim();\n var hd = row.slice(0, 3).toLowerCase();\n\n if (hd == \"
/i);\n\n for (j = 0; j < cells.length; ++j) {\n var cell = cells[j].trim();\n if (!cell.match(/\")) > -1) {\n m = m.slice(cc + 1);\n }\n\n for (var midx = 0; midx < merges.length; ++midx) {\n var _merge = merges[midx];\n\n if (_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) {\n C = _merge.e.c + 1;\n midx = -1;\n }\n }\n\n var tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n CS = tag.colspan ? +tag.colspan : 1;\n if ((RS = +tag.rowspan) > 1 || CS > 1) merges.push({\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + (RS || 1) - 1,\n c: C + CS - 1\n }\n });\n\n var _t = tag.t || \"\";\n /* TODO: generate stub cells */\n\n\n if (!m.length) {\n C += CS;\n continue;\n }\n\n m = htmldecode(m);\n if (range.s.r > R) range.s.r = R;\n if (range.e.r < R) range.e.r = R;\n if (range.s.c > C) range.s.c = C;\n if (range.e.c < C) range.e.c = C;\n if (!m.length) continue;\n var o = {\n t: 's',\n v: m\n };\n\n if (opts.raw || !m.trim().length || _t == 's') {} else if (m === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (m === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(m))) o = {\n t: 'n',\n v: fuzzynum(m)\n };else if (!isNaN(fuzzydate(m).getDate())) {\n o = {\n t: 'd',\n v: parseDate(m)\n };\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n };\n o.z = opts.dateNF || SSF._table[14];\n }\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = o;\n } else ws[encode_cell({\n r: R,\n c: C\n })] = o;\n\n C += CS;\n }\n }\n\n ws['!ref'] = encode_range(range);\n if (merges.length) ws[\"!merges\"] = merges;\n return ws;\n }\n\n function html_to_book(str, opts) {\n return sheet_to_workbook(html_to_sheet(str, opts), opts);\n }\n\n function make_html_row(ws, r, R, o) {\n var M = ws['!merges'] || [];\n var oo = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var RS = 0,\n CS = 0;\n\n for (var j = 0; j < M.length; ++j) {\n if (M[j].s.r > R || M[j].s.c > C) continue;\n if (M[j].e.r < R || M[j].e.c < C) continue;\n\n if (M[j].s.r < R || M[j].s.c < C) {\n RS = -1;\n break;\n }\n\n RS = M[j].e.r - M[j].s.r + 1;\n CS = M[j].e.c - M[j].s.c + 1;\n break;\n }\n\n if (RS < 0) continue;\n var coord = encode_cell({\n r: R,\n c: C\n });\n var cell = o.dense ? (ws[R] || [])[C] : ws[coord];\n /* TODO: html entities */\n\n var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n var sp = {};\n if (RS > 1) sp.rowspan = RS;\n if (CS > 1) sp.colspan = CS;\n sp.t = cell && cell.t || 'z';\n if (o.editable) w = '' + w + '';\n sp.id = (o.id || \"sjs\") + \"-\" + coord;\n\n if (sp.t != \"z\") {\n sp.v = cell.v;\n if (cell.z != null) sp.z = cell.z;\n }\n\n oo.push(writextag('td', w, sp));\n }\n\n var preamble = \"\";\n return preamble + oo.join(\"\") + \"
\";\n }\n\n function make_html_preamble(ws, R, o) {\n var out = [];\n return out.join(\"\") + '';\n }\n\n var _BEGIN = 'SheetJS Table Export';\n var _END = '';\n\n function sheet_to_html(ws, opts\n /*, wb:?Workbook*/\n ) {\n var o = opts || {};\n var header = o.header != null ? o.header : _BEGIN;\n var footer = o.footer != null ? o.footer : _END;\n var out = [header];\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n out.push(make_html_preamble(ws, r, o));\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n out.push(make_html_row(ws, r, R, o));\n }\n\n out.push(\"
\" + footer);\n return out.join(\"\");\n }\n\n return {\n to_workbook: html_to_book,\n to_sheet: html_to_sheet,\n _row: make_html_row,\n BEGIN: _BEGIN,\n END: _END,\n _preamble: make_html_preamble,\n from_sheet: sheet_to_html\n };\n }();\n\n function sheet_add_dom(ws, table, _opts) {\n var opts = _opts || {};\n if (DENSE != null) opts.dense = DENSE;\n var or_R = 0,\n or_C = 0;\n\n if (opts.origin != null) {\n if (typeof opts.origin == 'number') or_R = opts.origin;else {\n var _origin = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\n or_R = _origin.r;\n or_C = _origin.c;\n }\n }\n\n var rows = table.getElementsByTagName('tr');\n var sheetRows = Math.min(opts.sheetRows || 10000000, rows.length);\n var range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: or_R,\n c: or_C\n }\n };\n\n if (ws[\"!ref\"]) {\n var _range = decode_range(ws[\"!ref\"]);\n\n range.s.r = Math.min(range.s.r, _range.s.r);\n range.s.c = Math.min(range.s.c, _range.s.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n range.e.c = Math.max(range.e.c, _range.e.c);\n if (or_R == -1) range.e.r = or_R = _range.e.r + 1;\n }\n\n var merges = [],\n midx = 0;\n var rowinfo = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n var _R = 0,\n R = 0,\n _C = 0,\n C = 0,\n RS = 0,\n CS = 0;\n if (!ws[\"!cols\"]) ws['!cols'] = [];\n\n for (; _R < rows.length && R < sheetRows; ++_R) {\n var row = rows[_R];\n\n if (is_dom_element_hidden(row)) {\n if (opts.display) continue;\n rowinfo[R] = {\n hidden: true\n };\n }\n\n var elts = row.children;\n\n for (_C = C = 0; _C < elts.length; ++_C) {\n var elt = elts[_C];\n if (opts.display && is_dom_element_hidden(elt)) continue;\n var v = elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n var z = elt.getAttribute('z');\n\n for (midx = 0; midx < merges.length; ++midx) {\n var m = merges[midx];\n\n if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {\n C = m.e.c + 1 - or_C;\n midx = -1;\n }\n }\n /* TODO: figure out how to extract nonstandard mso- style */\n\n\n CS = +elt.getAttribute(\"colspan\") || 1;\n if ((RS = +elt.getAttribute(\"rowspan\") || 1) > 1 || CS > 1) merges.push({\n s: {\n r: R + or_R,\n c: C + or_C\n },\n e: {\n r: R + or_R + (RS || 1) - 1,\n c: C + or_C + (CS || 1) - 1\n }\n });\n var o = {\n t: 's',\n v: v\n };\n\n var _t = elt.getAttribute(\"t\") || \"\";\n\n if (v != null) {\n if (v.length == 0) o.t = _t || 'z';else if (opts.raw || v.trim().length == 0 || _t == \"s\") {} else if (v === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (v === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(v))) o = {\n t: 'n',\n v: fuzzynum(v)\n };else if (!isNaN(fuzzydate(v).getDate())) {\n o = {\n t: 'd',\n v: parseDate(v)\n };\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n };\n o.z = opts.dateNF || SSF._table[14];\n }\n }\n\n if (o.z === undefined && z != null) o.z = z;\n\n if (opts.dense) {\n if (!ws[R + or_R]) ws[R + or_R] = [];\n ws[R + or_R][C + or_C] = o;\n } else ws[encode_cell({\n c: C + or_C,\n r: R + or_R\n })] = o;\n\n if (range.e.c < C + or_C) range.e.c = C + or_C;\n C += CS;\n }\n\n ++R;\n }\n\n if (merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n range.e.r = Math.max(range.e.r, R - 1 + or_R);\n ws['!ref'] = encode_range(range);\n if (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\n return ws;\n }\n\n function parse_dom_table(table, _opts) {\n var opts = _opts || {};\n var ws = opts.dense ? [] : {};\n return sheet_add_dom(ws, table, _opts);\n }\n\n function table_to_book(table, opts) {\n return sheet_to_workbook(parse_dom_table(table, opts), opts);\n }\n\n function is_dom_element_hidden(element) {\n var display = '';\n var get_computed_style = get_get_computed_style_function(element);\n if (get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n if (!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\n return display === 'none';\n }\n /* global getComputedStyle */\n\n\n function get_get_computed_style_function(element) {\n // The proper getComputedStyle implementation is the one defined in the element window\n if (element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle; // If it is not available, try to get one from the global namespace\n\n if (typeof getComputedStyle === 'function') return getComputedStyle;\n return null;\n }\n /* OpenDocument */\n\n\n var parse_content_xml = function () {\n var parse_text_p = function parse_text_p(text) {\n /* 6.1.2 White Space Characters */\n var fixed = text.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \").replace(//g, \" \").replace(//g, function ($$, $1) {\n return Array(parseInt($1, 10) + 1).join(\" \");\n }).replace(/]*\\/>/g, \"\\t\").replace(//g, \"\\n\");\n var v = unescapexml(fixed.replace(/<[^>]*>/g, \"\"));\n return [v];\n };\n\n var number_formats = {\n /* ods name: [short ssf fmt, long ssf fmt] */\n day: [\"d\", \"dd\"],\n month: [\"m\", \"mm\"],\n year: [\"y\", \"yy\"],\n hours: [\"h\", \"hh\"],\n minutes: [\"m\", \"mm\"],\n seconds: [\"s\", \"ss\"],\n \"am-pm\": [\"A/P\", \"AM/PM\"],\n \"day-of-week\": [\"ddd\", \"dddd\"],\n era: [\"e\", \"ee\"],\n\n /* there is no native representation of LO \"Q\" format */\n quarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n };\n return function pcx(d, _opts) {\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var str = xlml_normalize(d);\n var state = [],\n tmp;\n var tag;\n var NFtag = {\n name: \"\"\n },\n NF = \"\",\n pidx = 0;\n var sheetag;\n var rowtag;\n var Sheets = {},\n SheetNames = [];\n var ws = opts.dense ? [] : {};\n var Rn, q;\n var ctag = {\n value: \"\"\n };\n var textp = \"\",\n textpidx = 0,\n textptag;\n var textR = [];\n var R = -1,\n C = -1,\n range = {\n s: {\n r: 1000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var row_ol = 0;\n var number_format_map = {};\n var merges = [],\n mrange = {},\n mR = 0,\n mC = 0;\n var rowinfo = [],\n rowpeat = 1,\n colpeat = 1;\n var arrayf = [];\n var WB = {\n Names: []\n };\n var atag = {};\n var _Ref = [\"\", \"\"];\n var comments = [],\n comment = {};\n var creator = \"\",\n creatoridx = 0;\n var isstub = false,\n intable = false;\n var i = 0;\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\").replace(//gm, \"\");\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = Rn[3].replace(/_.*$/, \"\")) {\n case 'table':\n case '工作表':\n // 9.1.2 \n if (Rn[1] === '/') {\n if (range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);else ws['!ref'] = \"A1:A1\";\n\n if (opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n ws['!fullref'] = ws['!ref'];\n range.e.r = opts.sheetRows - 1;\n ws['!ref'] = encode_range(range);\n }\n\n if (merges.length) ws['!merges'] = merges;\n if (rowinfo.length) ws[\"!rows\"] = rowinfo;\n sheetag.name = sheetag['名称'] || sheetag.name;\n if (typeof JSON !== 'undefined') JSON.stringify(sheetag);\n SheetNames.push(sheetag.name);\n Sheets[sheetag.name] = ws;\n intable = false;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n sheetag = parsexmltag(Rn[0], false);\n R = C = -1;\n range.s.r = range.s.c = 10000000;\n range.e.r = range.e.c = 0;\n ws = opts.dense ? [] : {};\n merges = [];\n rowinfo = [];\n intable = true;\n }\n\n break;\n\n case 'table-row-group':\n // 9.1.9 \n if (Rn[1] === \"/\") --row_ol;else ++row_ol;\n break;\n\n case 'table-row':\n case '行':\n // 9.1.3 \n if (Rn[1] === '/') {\n R += rowpeat;\n rowpeat = 1;\n break;\n }\n\n rowtag = parsexmltag(Rn[0], false);\n if (rowtag['行号']) R = rowtag['行号'] - 1;else if (R == -1) R = 0;\n rowpeat = +rowtag['number-rows-repeated'] || 1;\n /* TODO: remove magic */\n\n if (rowpeat < 10) for (i = 0; i < rowpeat; ++i) {\n if (row_ol > 0) rowinfo[R + i] = {\n level: row_ol\n };\n }\n C = -1;\n break;\n\n case 'covered-table-cell':\n // 9.1.5 \n if (Rn[1] !== '/') ++C;\n\n if (opts.sheetStubs) {\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = {\n t: 'z'\n };\n } else ws[encode_cell({\n r: R,\n c: C\n })] = {\n t: 'z'\n };\n }\n\n textp = \"\";\n textR = [];\n break;\n\n /* stub */\n\n case 'table-cell':\n case '数据':\n if (Rn[0].charAt(Rn[0].length - 2) === '/') {\n ++C;\n ctag = parsexmltag(Rn[0], false);\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n q = {\n t: 'z',\n v: null\n };\n if (ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\n if ((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n q.t = \"s\";\n q.v = unescapexml(ctag['string-value'] || \"\");\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = q;\n } else {\n ws[encode_cell({\n r: R,\n c: C\n })] = q;\n }\n }\n\n C += colpeat - 1;\n } else if (Rn[1] !== '/') {\n ++C;\n colpeat = 1;\n var rptR = rowpeat ? R + rowpeat - 1 : R;\n if (C > range.e.c) range.e.c = C;\n if (C < range.s.c) range.s.c = C;\n if (R < range.s.r) range.s.r = R;\n if (rptR > range.e.r) range.e.r = rptR;\n ctag = parsexmltag(Rn[0], false);\n comments = [];\n comment = {};\n q = {\n t: ctag['数据类型'] || ctag['value-type'],\n v: null\n };\n\n if (opts.cellFormula) {\n if (ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\n if (ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n mR = parseInt(ctag['number-matrix-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-matrix-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n q.F = encode_range(mrange);\n arrayf.push([mrange, q.F]);\n }\n\n if (ctag.formula) q.f = ods_to_csf_formula(ctag.formula);else for (i = 0; i < arrayf.length; ++i) {\n if (R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r) if (C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c) q.F = arrayf[i][1];\n }\n }\n\n if (ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n mR = parseInt(ctag['number-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n merges.push(mrange);\n }\n /* 19.675.2 table:number-columns-repeated */\n\n\n if (ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n /* 19.385 office:value-type */\n\n switch (q.t) {\n case 'boolean':\n q.t = 'b';\n q.v = parsexmlbool(ctag['boolean-value']);\n break;\n\n case 'float':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'percentage':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'currency':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'date':\n q.t = 'd';\n q.v = parseDate(ctag['date-value']);\n\n if (!opts.cellDates) {\n q.t = 'n';\n q.v = datenum(q.v);\n }\n\n q.z = 'm/d/yy';\n break;\n\n case 'time':\n q.t = 'n';\n q.v = parse_isodur(ctag['time-value']) / 86400;\n break;\n\n case 'number':\n q.t = 'n';\n q.v = parseFloat(ctag['数据数值']);\n break;\n\n default:\n if (q.t === 'string' || q.t === 'text' || !q.t) {\n q.t = 's';\n\n if (ctag['string-value'] != null) {\n textp = unescapexml(ctag['string-value']);\n textR = [];\n }\n } else throw new Error('Unsupported value type ' + q.t);\n\n }\n } else {\n isstub = false;\n\n if (q.t === 's') {\n q.v = textp || '';\n if (textR.length) q.R = textR;\n isstub = textpidx == 0;\n }\n\n if (atag.Target) q.l = atag;\n\n if (comments.length > 0) {\n q.c = comments;\n comments = [];\n }\n\n if (textp && opts.cellText !== false) q.w = textp;\n\n if (isstub) {\n q.t = \"z\";\n delete q.v;\n }\n\n if (!isstub || opts.sheetStubs) {\n if (!(opts.sheetRows && opts.sheetRows <= R)) {\n for (var rpt = 0; rpt < rowpeat; ++rpt) {\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n\n if (opts.dense) {\n if (!ws[R + rpt]) ws[R + rpt] = [];\n ws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\n while (--colpeat > 0) {\n ws[R + rpt][C + colpeat] = dup(q);\n }\n } else {\n ws[encode_cell({\n r: R + rpt,\n c: C\n })] = q;\n\n while (--colpeat > 0) {\n ws[encode_cell({\n r: R + rpt,\n c: C + colpeat\n })] = dup(q);\n }\n }\n\n if (range.e.c <= C) range.e.c = C;\n }\n }\n }\n\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n C += colpeat - 1;\n colpeat = 0;\n q = {};\n textp = \"\";\n textR = [];\n }\n\n atag = {};\n break;\n // 9.1.4 \n\n /* pure state */\n\n case 'document': // TODO: is the root for FODS\n\n case 'document-content':\n case '电子表格文档': // 3.1.3.2 \n\n case 'spreadsheet':\n case '主体': // 3.7 \n\n case 'scripts': // 3.12 \n\n case 'styles': // TODO \n\n case 'font-face-decls': // 3.14 \n\n case 'master-styles':\n //3.15.4 -- relevant for FODS\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n case 'annotation':\n // 14.1 \n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n comment.t = textp;\n if (textR.length) comment.R = textR;\n comment.a = creator;\n comments.push(comment);\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n state.push([Rn[3], false]);\n }\n\n creator = \"\";\n creatoridx = 0;\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'creator':\n // 4.3.2.7 \n if (Rn[1] === '/') {\n creator = str.slice(creatoridx, Rn.index);\n } else creatoridx = Rn.index + Rn[0].length;\n\n break;\n\n /* ignore state */\n\n case 'meta':\n case '元数据': // TODO: FODS/UOF\n\n case 'settings': // TODO: \n\n case 'config-item-set': // TODO: \n\n case 'config-item-map-indexed': // TODO: \n\n case 'config-item-map-entry': // TODO: \n\n case 'config-item-map-named': // TODO: \n\n case 'shapes': // 9.2.8 \n\n case 'frame': // 10.4.2 \n\n case 'text-box': // 10.4.3 \n\n case 'image': // 10.4.4 \n\n case 'data-pilot-tables': // 9.6.2 \n\n case 'list-style': // 16.30 \n\n case 'form': // 13.13 \n\n case 'dde-links': // 9.8 \n\n case 'event-listeners': // TODO\n\n case 'chart':\n // TODO\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], false]);\n\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'scientific-number':\n // TODO: \n break;\n\n case 'currency-symbol':\n // TODO: \n break;\n\n case 'currency-style':\n // TODO: \n break;\n\n case 'number-style': // 16.27.2 \n\n case 'percentage-style': // 16.27.9 \n\n case 'date-style': // 16.27.10 \n\n case 'time-style':\n // 16.27.18 \n if (Rn[1] === '/') {\n number_format_map[NFtag.name] = NF;\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n NF = \"\";\n NFtag = parsexmltag(Rn[0], false);\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'script':\n break;\n // 3.13 \n\n case 'libraries':\n break;\n // TODO: \n\n case 'automatic-styles':\n break;\n // 3.15.3 \n\n case 'default-style': // TODO: \n\n case 'page-layout':\n break;\n // TODO: \n\n case 'style':\n // 16.2 \n break;\n\n case 'map':\n break;\n // 16.3 \n\n case 'font-face':\n break;\n // 16.21 \n\n case 'paragraph-properties':\n break;\n // 17.6 \n\n case 'table-properties':\n break;\n // 17.15 \n\n case 'table-column-properties':\n break;\n // 17.16 \n\n case 'table-row-properties':\n break;\n // 17.17 \n\n case 'table-cell-properties':\n break;\n // 17.18 \n\n case 'number':\n // 16.27.3 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'fraction':\n break;\n // TODO 16.27.6 \n\n case 'day': // 16.27.11 \n\n case 'month': // 16.27.12 \n\n case 'year': // 16.27.13 \n\n case 'era': // 16.27.14 \n\n case 'day-of-week': // 16.27.15 \n\n case 'week-of-year': // 16.27.16 \n\n case 'quarter': // 16.27.17 \n\n case 'hours': // 16.27.19 \n\n case 'minutes': // 16.27.20 \n\n case 'seconds': // 16.27.21 \n\n case 'am-pm':\n // 16.27.22 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'boolean-style':\n break;\n // 16.27.23 \n\n case 'boolean':\n break;\n // 16.27.24 \n\n case 'text-style':\n break;\n // 16.27.25 \n\n case 'text':\n // 16.27.26 \n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") switch (state[state.length - 1][0]) {\n case 'number-style':\n case 'date-style':\n case 'time-style':\n NF += str.slice(pidx, Rn.index);\n break;\n } else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'named-range':\n // 9.4.12 \n tag = parsexmltag(Rn[0], false);\n _Ref = ods_to_csf_3D(tag['cell-range-address']);\n var nrange = {\n Name: tag.name,\n Ref: _Ref[0] + '!' + _Ref[1]\n };\n if (intable) nrange.Sheet = SheetNames.length;\n WB.Names.push(nrange);\n break;\n\n case 'text-content':\n break;\n // 16.27.27 \n\n case 'text-properties':\n break;\n // 16.27.27 \n\n case 'embedded-text':\n break;\n // 16.27.4 \n\n case 'body':\n case '电子表格':\n break;\n // 3.3 16.9.6 19.726.3\n\n case 'forms':\n break;\n // 12.25.2 13.2\n\n case 'table-column':\n break;\n // 9.1.6 \n\n case 'table-header-rows':\n break;\n // 9.1.7 \n\n case 'table-rows':\n break;\n // 9.1.12 \n\n /* TODO: outline levels */\n\n case 'table-column-group':\n break;\n // 9.1.10 \n\n case 'table-header-columns':\n break;\n // 9.1.11 \n\n case 'table-columns':\n break;\n // 9.1.12 \n\n case 'null-date':\n break;\n // 9.4.2 TODO: date1904\n\n case 'graphic-properties':\n break;\n // 17.21 \n\n case 'calculation-settings':\n break;\n // 9.4.1 \n\n case 'named-expressions':\n break;\n // 9.4.11 \n\n case 'label-range':\n break;\n // 9.4.9 \n\n case 'label-ranges':\n break;\n // 9.4.10 \n\n case 'named-expression':\n break;\n // 9.4.13 \n\n case 'sort':\n break;\n // 9.4.19 \n\n case 'sort-by':\n break;\n // 9.4.20 \n\n case 'sort-groups':\n break;\n // 9.4.22 \n\n case 'tab':\n break;\n // 6.1.4 \n\n case 'line-break':\n break;\n // 6.1.5 \n\n case 'span':\n break;\n // 6.1.7 \n\n case 'p':\n case '文本串':\n // 5.1.3 \n if (['master-styles'].indexOf(state[state.length - 1][0]) > -1) break;\n\n if (Rn[1] === '/' && (!ctag || !ctag['string-value'])) {\n var ptp = parse_text_p(str.slice(textpidx, Rn.index), textptag);\n textp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n } else {\n textptag = parsexmltag(Rn[0], false);\n textpidx = Rn.index + Rn[0].length;\n }\n\n break;\n // \n\n case 's':\n break;\n // \n\n case 'database-range':\n // 9.4.15 \n if (Rn[1] === '/') break;\n\n try {\n _Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n Sheets[_Ref[0]]['!autofilter'] = {\n ref: _Ref[1]\n };\n } catch (e) {\n /* empty */\n }\n\n break;\n\n case 'date':\n break;\n // <*:date>\n\n case 'object':\n break;\n // 10.4.6.2 \n\n case 'title':\n case '标题':\n break;\n // <*:title> OR \n\n case 'desc':\n break;\n // <*:desc>\n\n case 'binary-data':\n break;\n // 10.4.5 TODO: b64 blob\n\n /* 9.2 Advanced Tables */\n\n case 'table-source':\n break;\n // 9.2.6\n\n case 'scenario':\n break;\n // 9.2.6\n\n case 'iteration':\n break;\n // 9.4.3 \n\n case 'content-validations':\n break;\n // 9.4.4 \n\n case 'filter':\n break;\n // 9.5.2 \n\n case 'filter-and':\n break;\n // 9.5.3 \n\n case 'filter-or':\n break;\n // 9.5.4 \n\n case 'filter-condition':\n break;\n // 9.5.5 \n\n case 'list-level-style-bullet':\n break;\n // 16.31 \n\n case 'page-count':\n break;\n // TODO \n\n case 'time':\n break;\n // TODO \n\n /* 9.3 Advanced Table Cells */\n\n case 'cell-range-source':\n break;\n // 9.3.1 \n\n case 'property':\n break;\n // 13.8 \n\n case 'a':\n // 6.1.8 hyperlink\n if (Rn[1] !== '/') {\n atag = parsexmltag(Rn[0], false);\n if (!atag.href) break;\n atag.Target = atag.href;\n delete atag.href;\n\n if (atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n _Ref = ods_to_csf_3D(atag.Target.slice(1));\n atag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n }\n }\n\n break;\n\n /* non-standard */\n\n case 'table-protection':\n break;\n\n case 'data-pilot-grand-total':\n break;\n // ';\n return function wso() {\n return XML_HEADER + payload;\n };\n }();\n\n var write_content_ods = function () {\n /* 6.1.2 White Space Characters */\n var write_text_p = function write_text_p(text) {\n return escapexml(text).replace(/ +/g, function ($$) {\n return '';\n }).replace(/\\t/g, \"\").replace(/\\n/g, \"\").replace(/^ /, \"\").replace(/ $/, \"\");\n };\n\n var null_cell_xml = ' \\n';\n var covered_cell_xml = ' \\n';\n\n var write_ws = function write_ws(ws, wb, i) {\n /* Section 9 Tables */\n var o = [];\n o.push(' \\n');\n var R = 0,\n C = 0,\n range = decode_range(ws['!ref']);\n var marr = ws['!merges'] || [],\n mi = 0;\n var dense = Array.isArray(ws);\n\n for (R = 0; R < range.s.r; ++R) {\n o.push(' \\n');\n }\n\n for (; R <= range.e.r; ++R) {\n o.push(' \\n');\n\n for (C = 0; C < range.s.c; ++C) {\n o.push(null_cell_xml);\n }\n\n for (; C <= range.e.c; ++C) {\n var skip = false,\n ct = {},\n textp = \"\";\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n ct['table:number-columns-spanned'] = marr[mi].e.c - marr[mi].s.c + 1;\n ct['table:number-rows-spanned'] = marr[mi].e.r - marr[mi].s.r + 1;\n break;\n }\n\n if (skip) {\n o.push(covered_cell_xml);\n continue;\n }\n\n var ref = encode_cell({\n r: R,\n c: C\n }),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (cell && cell.f) {\n ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\n if (cell.F) {\n if (cell.F.slice(0, ref.length) == ref) {\n var _Fref = decode_range(cell.F);\n\n ct['table:number-matrix-columns-spanned'] = _Fref.e.c - _Fref.s.c + 1;\n ct['table:number-matrix-rows-spanned'] = _Fref.e.r - _Fref.s.r + 1;\n }\n }\n }\n\n if (!cell) {\n o.push(null_cell_xml);\n continue;\n }\n\n switch (cell.t) {\n case 'b':\n textp = cell.v ? 'TRUE' : 'FALSE';\n ct['office:value-type'] = \"boolean\";\n ct['office:boolean-value'] = cell.v ? 'true' : 'false';\n break;\n\n case 'n':\n textp = cell.w || String(cell.v || 0);\n ct['office:value-type'] = \"float\";\n ct['office:value'] = cell.v || 0;\n break;\n\n case 's':\n case 'str':\n textp = cell.v == null ? \"\" : cell.v;\n ct['office:value-type'] = \"string\";\n break;\n\n case 'd':\n textp = cell.w || parseDate(cell.v).toISOString();\n ct['office:value-type'] = \"date\";\n ct['office:date-value'] = parseDate(cell.v).toISOString();\n ct['table:style-name'] = \"ce1\";\n break;\n //case 'e':\n\n default:\n o.push(null_cell_xml);\n continue;\n }\n\n var text_p = write_text_p(textp);\n\n if (cell.l && cell.l.Target) {\n var _tgt = cell.l.Target;\n _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n text_p = writextag('text:a', text_p, {\n 'xlink:href': _tgt\n });\n }\n\n o.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n }\n\n o.push(' \\n');\n }\n\n o.push(' \\n');\n return o.join(\"\");\n };\n\n var write_automatic_styles_ods = function write_automatic_styles_ods(o) {\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' \\n');\n /* table */\n\n o.push(' \\n'); // style:master-page-name=\"mp1\">\\n');\n\n o.push(' \\n');\n o.push(' \\n');\n /* table cells, text */\n\n o.push(' \\n');\n /* page-layout */\n\n o.push(' \\n');\n };\n\n return function wcx(wb, opts) {\n var o = [XML_HEADER];\n /* 3.1.3.2 */\n\n var attr = wxt_helper({\n 'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n 'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n 'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n 'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n 'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n 'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n 'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n 'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n 'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n 'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n 'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n 'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n 'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n 'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n 'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n 'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n 'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n 'xmlns:ooo': \"http://openoffice.org/2004/office\",\n 'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n 'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n 'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n 'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n 'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n 'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n 'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n 'xmlns:rpt': \"http://openoffice.org/2005/report\",\n 'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n 'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n 'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n 'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n 'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n 'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n 'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n 'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n 'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n 'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n 'office:version': \"1.2\"\n });\n var fods = wxt_helper({\n 'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n 'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n });\n if (opts.bookType == \"fods\") o.push('\\n');else o.push('\\n');\n write_automatic_styles_ods(o);\n o.push(' \\n');\n o.push(' \\n');\n\n for (var i = 0; i != wb.SheetNames.length; ++i) {\n o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n }\n\n o.push(' \\n');\n o.push(' \\n');\n if (opts.bookType == \"fods\") o.push('');else o.push('');\n return o.join(\"\");\n };\n }();\n\n function write_ods(wb, opts) {\n if (opts.bookType == \"fods\") return write_content_ods(wb, opts);\n var zip = zip_new();\n var f = \"\";\n var manifest = [];\n var rdf = [];\n /* Part 3 Section 3.3 MIME Media Type */\n\n f = \"mimetype\";\n zip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n /* Part 1 Section 2.2 Documents */\n\n f = \"content.xml\";\n zip_add_file(zip, f, write_content_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"ContentFile\"]);\n /* TODO: these are hard-coded styles to satiate excel */\n\n f = \"styles.xml\";\n zip_add_file(zip, f, write_styles_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"StylesFile\"]);\n /* TODO: this is hard-coded to satiate excel */\n\n f = \"meta.xml\";\n zip_add_file(zip, f, write_meta_ods());\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"MetadataFile\"]);\n /* Part 3 Section 6 Metadata Manifest File */\n\n f = \"manifest.rdf\";\n zip_add_file(zip, f, write_rdf(rdf\n /*, opts*/\n ));\n manifest.push([f, \"application/rdf+xml\"]);\n /* Part 3 Section 4 Manifest File */\n\n f = \"META-INF/manifest.xml\";\n zip_add_file(zip, f, write_manifest(manifest\n /*, opts*/\n ));\n return zip;\n }\n\n function write_sheet_index(wb, sheet) {\n if (!sheet) return 0;\n var idx = wb.SheetNames.indexOf(sheet);\n if (idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n return idx;\n }\n\n function write_obj_str(factory) {\n return function write_str(wb, o) {\n var idx = write_sheet_index(wb, o.sheet);\n return factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n };\n }\n\n var write_htm_str = write_obj_str(HTML_);\n var write_csv_str = write_obj_str({\n from_sheet: sheet_to_csv\n });\n var write_slk_str = write_obj_str(typeof SYLK !== \"undefined\" ? SYLK : {});\n var write_dif_str = write_obj_str(typeof DIF !== \"undefined\" ? DIF : {});\n var write_prn_str = write_obj_str(typeof PRN !== \"undefined\" ? PRN : {});\n var write_rtf_str = write_obj_str(typeof RTF !== \"undefined\" ? RTF : {});\n var write_txt_str = write_obj_str({\n from_sheet: sheet_to_txt\n });\n var write_dbf_buf = write_obj_str(typeof DBF !== \"undefined\" ? DBF : {});\n var write_eth_str = write_obj_str(typeof ETH !== \"undefined\" ? ETH : {});\n\n function fix_opts_func(defaults) {\n return function fix_opts(opts) {\n for (var i = 0; i != defaults.length; ++i) {\n var d = defaults[i];\n if (opts[d[0]] === undefined) opts[d[0]] = d[1];\n if (d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n }\n };\n }\n\n var fix_read_opts = function fix_read_opts(opts) {\n fix_opts_func([['cellNF', false],\n /* emit cell number format string as .z */\n ['cellHTML', true],\n /* emit html string as .h */\n ['cellFormula', true],\n /* emit formulae as .f */\n ['cellStyles', false],\n /* emits style/theme as .s */\n ['cellText', true],\n /* emit formatted text as .w */\n ['cellDates', false],\n /* emit date cells with type `d` */\n ['sheetStubs', false],\n /* emit empty cells */\n ['sheetRows', 0, 'n'],\n /* read n rows (0 = read all rows) */\n ['bookDeps', false],\n /* parse calculation chains */\n ['bookSheets', false],\n /* only try to get sheet names (no Sheets) */\n ['bookProps', false],\n /* only try to get properties (no Sheets) */\n ['bookFiles', false],\n /* include raw file structure (keys, files, cfb) */\n ['bookVBA', false],\n /* include vba raw data (vbaraw) */\n ['password', ''],\n /* password */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ])(opts);\n };\n\n var fix_write_opts = fix_opts_func([['cellDates', false],\n /* write date cells with type `d` */\n ['bookSST', false],\n /* Generate Shared String Table */\n ['bookType', 'xlsx'],\n /* Type of workbook (xlsx/m/b) */\n ['compression', false],\n /* Use file compression */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ]);\n\n function get_sheet_type(n) {\n if (RELS.WS.indexOf(n) > -1) return \"sheet\";\n if (RELS.CS && n == RELS.CS) return \"chart\";\n if (RELS.DS && n == RELS.DS) return \"dialog\";\n if (RELS.MS && n == RELS.MS) return \"macro\";\n return n && n.length ? n : \"sheet\";\n }\n\n function safe_parse_wbrels(wbrels, sheets) {\n if (!wbrels) return 0;\n\n try {\n wbrels = sheets.map(function pwbr(w) {\n if (!w.id) w.id = w.strRelID;\n return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)];\n });\n } catch (e) {\n return null;\n }\n\n return !wbrels || wbrels.length === 0 ? null : wbrels;\n }\n\n function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n try {\n sheetRels[sheet] = parse_rels(getzipstr(zip, relsPath, true), path);\n var data = getzipdata(zip, path);\n\n var _ws;\n\n switch (stype) {\n case 'sheet':\n _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'chart':\n _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n if (!_ws || !_ws['!drawel']) break;\n var dfile = resolve_path(_ws['!drawel'].Target, path);\n var drelsp = get_rels_path(dfile);\n var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n var chartp = resolve_path(draw, dfile);\n var crelsp = get_rels_path(chartp);\n _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n break;\n\n case 'macro':\n _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'dialog':\n _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n default:\n throw new Error(\"Unrecognized sheet type \" + stype);\n }\n\n sheets[sheet] = _ws;\n /* scan rels for comments */\n\n var comments = [];\n if (sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function (n) {\n if (sheetRels[sheet][n].Type == RELS.CMNT) {\n var dfile = resolve_path(sheetRels[sheet][n].Target, path);\n comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n if (!comments || !comments.length) return;\n sheet_insert_comments(_ws, comments);\n }\n });\n } catch (e) {\n if (opts.WTF) throw e;\n }\n }\n\n function strip_front_slash(x) {\n return x.charAt(0) == '/' ? x.slice(1) : x;\n }\n\n function parse_zip(zip, opts) {\n make_ssf(SSF);\n opts = opts || {};\n fix_read_opts(opts);\n /* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\n if (safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n /* UOC */\n\n if (safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n /* Numbers */\n\n if (safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n var entries = zipentries(zip);\n var dir = parse_ct(getzipstr(zip, '[Content_Types].xml'));\n var xlsb = false;\n var sheets, binname;\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.xml\";\n if (getzipdata(zip, binname, true)) dir.workbooks.push(binname);\n }\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.bin\";\n if (!getzipdata(zip, binname, true)) throw new Error(\"Could not find workbook\");\n dir.workbooks.push(binname);\n xlsb = true;\n }\n\n if (dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n var themes = {};\n var styles = {};\n\n if (!opts.bookSheets && !opts.bookProps) {\n strs = [];\n if (dir.sst) try {\n strs = parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//, ''), true) || \"\", dir.themes[0], opts);\n if (dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n }\n /*var externbooks = */\n\n\n dir.links.map(function (link) {\n try {\n var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n } catch (e) {}\n });\n var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n var props = {},\n propdata = \"\";\n\n if (dir.coreprops.length) {\n propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n if (propdata) props = parse_core_props(propdata);\n\n if (dir.extprops.length !== 0) {\n propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n if (propdata) parse_ext_props(propdata, props, opts);\n }\n }\n\n var custprops = {};\n\n if (!opts.bookSheets || opts.bookProps) {\n if (dir.custprops.length !== 0) {\n propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n if (propdata) custprops = parse_cust_props(propdata, opts);\n }\n }\n\n var out = {};\n\n if (opts.bookSheets || opts.bookProps) {\n if (wb.Sheets) sheets = wb.Sheets.map(function pluck(x) {\n return x.name;\n });else if (props.Worksheets && props.SheetNames.length > 0) sheets = props.SheetNames;\n\n if (opts.bookProps) {\n out.Props = props;\n out.Custprops = custprops;\n }\n\n if (opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n if (opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n }\n\n sheets = {};\n var deps = {};\n if (opts.bookDeps && dir.calcchain) deps = parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)), dir.calcchain, opts);\n var i = 0;\n var sheetRels = {};\n var path, relsPath;\n {\n var wbsheets = wb.Sheets;\n props.Worksheets = wbsheets.length;\n props.SheetNames = [];\n\n for (var j = 0; j != wbsheets.length; ++j) {\n props.SheetNames[j] = wbsheets[j].name;\n }\n }\n var wbext = xlsb ? \"bin\" : \"xml\";\n var wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi + 1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi + 1) + \".rels\").replace(/^\\//, \"\");\n if (!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n if (wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n /* Numbers iOS hack */\n\n var nmode = getzipdata(zip, \"xl/worksheets/sheet.xml\", true) ? 1 : 0;\n\n wsloop: for (i = 0; i != props.Worksheets; ++i) {\n var stype = \"sheet\";\n\n if (wbrels && wbrels[i]) {\n path = 'xl/' + wbrels[i][1].replace(/[\\/]?xl\\//, \"\");\n if (!safegetzipfile(zip, path)) path = wbrels[i][1];\n if (!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/, \"\") + wbrels[i][1];\n stype = wbrels[i][2];\n } else {\n path = 'xl/worksheets/sheet' + (i + 1 - nmode) + \".\" + wbext;\n path = path.replace(/sheet0\\./, \"sheet.\");\n }\n\n relsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n if (opts && opts.sheets != null) switch (typeof opts.sheets) {\n case \"number\":\n if (i != opts.sheets) continue wsloop;\n break;\n\n case \"string\":\n if (props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop;\n break;\n\n default:\n if (Array.isArray && Array.isArray(opts.sheets)) {\n var snjseen = false;\n\n for (var snj = 0; snj != opts.sheets.length; ++snj) {\n if (typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen = 1;\n if (typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n }\n\n if (!snjseen) continue wsloop;\n }\n\n }\n safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n }\n\n out = {\n Directory: dir,\n Workbook: wb,\n Props: props,\n Custprops: custprops,\n Deps: deps,\n Sheets: sheets,\n SheetNames: props.SheetNames,\n Strings: strs,\n Styles: styles,\n Themes: themes,\n SSF: SSF.get_table()\n };\n\n if (opts && opts.bookFiles) {\n out.keys = entries;\n out.files = zip.files;\n }\n\n if (opts && opts.bookVBA) {\n if (dir.vba.length > 0) out.vbaraw = getzipdata(zip, strip_front_slash(dir.vba[0]), true);else if (dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin', true);\n }\n\n return out;\n }\n /* [MS-OFFCRYPTO] 2.1.1 */\n\n\n function parse_xlsxcfb(cfb, _opts) {\n var opts = _opts || {};\n var f = 'Workbook',\n data = CFB.find(cfb, f);\n\n try {\n f = '/!DataSpaces/Version';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var version = */\n\n parse_DataSpaceVersionInfo(data.content);\n /* 2.3.4.1 */\n\n f = '/!DataSpaces/DataSpaceMap';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var dsm = parse_DataSpaceMap(data.content);\n if (dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.2 */\n\n f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var seds = parse_DataSpaceDefinition(data.content);\n if (seds.length != 1 || seds[0] != \"StrongEncryptionTransform\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.3 */\n\n f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var hdr = */\n\n parse_Primary(data.content);\n } catch (e) {}\n\n f = '/EncryptionInfo';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var einfo = parse_EncryptionInfo(data.content);\n /* 2.3.4.4 */\n\n f = '/EncryptedPackage';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*global decrypt_agile */\n\n if (einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n /*global decrypt_std76 */\n\n if (einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n throw new Error(\"File is password-protected\");\n }\n\n function write_zip(wb, opts) {\n _shapeid = 1024;\n if (opts.bookType == \"ods\") return write_ods(wb, opts);\n\n if (wb && !wb.SSF) {\n wb.SSF = SSF.get_table();\n }\n\n if (wb && wb.SSF) {\n make_ssf(SSF);\n SSF.load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n }\n\n opts.rels = {};\n opts.wbrels = {};\n opts.Strings = [];\n opts.Strings.Count = 0;\n opts.Strings.Unique = 0;\n if (browser_has_Map) opts.revStrings = new Map();else {\n opts.revStrings = {};\n opts.revStrings.foo = [];\n delete opts.revStrings.foo;\n }\n var wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n var ct = new_ct();\n fix_write_opts(opts = opts || {});\n var zip = zip_new();\n var f = \"\",\n rId = 0;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n f = \"docProps/core.xml\";\n zip_add_file(zip, f, write_core_props(wb.Props, opts));\n ct.coreprops.push(f);\n add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n f = \"docProps/app.xml\";\n\n if (wb.Props && wb.Props.SheetNames) {\n /* empty */\n } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n var _sn = [];\n\n for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n }\n\n wb.Props.SheetNames = _sn;\n }\n\n wb.Props.Worksheets = wb.Props.SheetNames.length;\n zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n ct.extprops.push(f);\n add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n f = \"docProps/custom.xml\";\n zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n ct.custprops.push(f);\n add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n }\n\n for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n var wsrels = {\n '!id': {}\n };\n var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n switch (_type) {\n case \"chart\":\n /* falls through */\n\n default:\n f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n zip_add_file(zip, f, write_ws(rId - 1, f, opts, wb, wsrels));\n ct.sheets.push(f);\n add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n }\n\n if (ws) {\n var comments = ws['!comments'];\n var need_vml = false;\n\n if (comments && comments.length > 0) {\n var cf = \"xl/comments\" + rId + \".\" + wbext;\n zip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n ct.comments.push(cf);\n add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n need_vml = true;\n }\n\n if (ws['!legacy']) {\n if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n }\n\n delete ws['!comments'];\n delete ws['!legacy'];\n }\n\n if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n }\n\n if (opts.Strings != null && opts.Strings.length > 0) {\n f = \"xl/sharedStrings.\" + wbext;\n zip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n ct.strs.push(f);\n add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n }\n\n f = \"xl/workbook.\" + wbext;\n zip_add_file(zip, f, write_wb(wb, f, opts));\n ct.workbooks.push(f);\n add_rels(opts.rels, 1, f, RELS.WB);\n /* TODO: something more intelligent with themes */\n\n f = \"xl/theme/theme1.xml\";\n zip_add_file(zip, f, write_theme(wb.Themes, opts));\n ct.themes.push(f);\n add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n /* TODO: something more intelligent with styles */\n\n f = \"xl/styles.\" + wbext;\n zip_add_file(zip, f, write_sty(wb, f, opts));\n ct.styles.push(f);\n add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n if (wb.vbaraw && vbafmt) {\n f = \"xl/vbaProject.bin\";\n zip_add_file(zip, f, wb.vbaraw);\n ct.vba.push(f);\n add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n }\n\n zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n delete opts.revssf;\n delete opts.ssf;\n return zip;\n }\n\n function firstbyte(f, o) {\n var x = \"\";\n\n switch ((o || {}).type || \"base64\") {\n case 'buffer':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n case 'base64':\n x = Base64.decode(f.slice(0, 12));\n break;\n\n case 'binary':\n x = f;\n break;\n\n case 'array':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n default:\n throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n }\n\n return [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\n function read_cfb(cfb, opts) {\n if (CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n return parse_xlscfb(cfb, opts);\n }\n\n function read_zip(data, opts) {\n var zip,\n d = data;\n var o = opts || {};\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n zip = zip_read(d, o);\n return parse_zip(zip, o);\n }\n\n function read_plaintext(data, o) {\n var i = 0;\n\n main: while (i < data.length) {\n switch (data.charCodeAt(i)) {\n case 0x0A:\n case 0x0D:\n case 0x20:\n ++i;\n break;\n\n case 0x3C:\n return parse_xlml(data.slice(i), o);\n\n default:\n break main;\n }\n }\n\n return PRN.to_workbook(data, o);\n }\n\n function read_plaintext_raw(data, o) {\n var str = \"\",\n bytes = firstbyte(data, o);\n\n switch (o.type) {\n case 'base64':\n str = Base64.decode(data);\n break;\n\n case 'binary':\n str = data;\n break;\n\n case 'buffer':\n str = data.toString('binary');\n break;\n\n case 'array':\n str = cc2str(data);\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n return read_plaintext(str, o);\n }\n\n function read_utf16(data, o) {\n var d = data;\n if (o.type == 'base64') d = Base64.decode(d);\n d = cptable.utils.decode(1200, d.slice(2), 'str');\n o.type = \"binary\";\n return read_plaintext(d, o);\n }\n\n function bstrify(data) {\n return !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n }\n\n function read_prn(data, d, o, str) {\n if (str) {\n o.type = \"string\";\n return PRN.to_workbook(data, o);\n }\n\n return PRN.to_workbook(d, o);\n }\n\n function readSync(data, opts) {\n reset_cp();\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), opts);\n var d = data,\n n = [0, 0, 0, 0],\n str = false;\n var o = opts || {};\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n _ssfopts = {};\n if (o.dateNF) _ssfopts.dateNF = o.dateNF;\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n\n if (o.type == \"file\") {\n o.type = has_buf ? \"buffer\" : \"binary\";\n d = read_binary(data);\n }\n\n if (o.type == \"string\") {\n str = true;\n o.type = \"binary\";\n o.codepage = 65001;\n d = bstrify(data);\n }\n\n if (o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n // $FlowIgnore\n var ab = new ArrayBuffer(3),\n vu = new Uint8Array(ab);\n vu.foo = \"bar\"; // $FlowIgnore\n\n if (!vu.foo) {\n o = dup(o);\n o.type = 'array';\n return readSync(ab2a(d), o);\n }\n }\n\n switch ((n = firstbyte(d, o))[0]) {\n case 0xD0:\n 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);\n break;\n\n case 0x09:\n if (n[1] <= 0x04) return parse_xlscfb(d, o);\n break;\n\n case 0x3C:\n return parse_xlml(d, o);\n\n case 0x49:\n if (n[1] === 0x44) return read_wb_ID(d, o);\n break;\n\n case 0x54:\n if (n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o);\n break;\n\n case 0x50:\n return n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09 ? read_zip(d, o) : read_prn(data, d, o, str);\n\n case 0xEF:\n return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\n case 0xFF:\n if (n[1] === 0xFE) {\n return read_utf16(d, o);\n }\n\n break;\n\n case 0x00:\n if (n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n break;\n\n case 0x03:\n case 0x83:\n case 0x8B:\n case 0x8C:\n return DBF.to_workbook(d, o);\n\n case 0x7B:\n if (n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o);\n break;\n\n case 0x0A:\n case 0x0D:\n case 0x20:\n return read_plaintext_raw(d, o);\n }\n\n if (DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n return read_prn(data, d, o, str);\n }\n\n function readFileSync(filename, opts) {\n var o = opts || {};\n o.type = 'file';\n return readSync(filename, o);\n }\n\n function write_cfb_ctr(cfb, o) {\n switch (o.type) {\n case \"base64\":\n case \"binary\":\n break;\n\n case \"buffer\":\n case \"array\":\n o.type = \"\";\n break;\n\n case \"file\":\n return write_dl(o.file, CFB.write(cfb, {\n type: has_buf ? 'buffer' : \"\"\n }));\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n return CFB.write(cfb, o);\n }\n\n function write_zip_type(wb, opts) {\n var o = opts || {};\n var z = write_zip(wb, o);\n var oopts = {};\n if (o.compression) oopts.compression = 'DEFLATE';\n if (o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";else switch (o.type) {\n case \"base64\":\n oopts.type = \"base64\";\n break;\n\n case \"binary\":\n oopts.type = \"string\";\n break;\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n case \"buffer\":\n case \"file\":\n oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n var out = z.FullPaths ? CFB.write(z, {\n fileType: \"zip\",\n type: {\n \"nodebuffer\": \"buffer\",\n \"string\": \"binary\"\n }[oopts.type] || oopts.type\n }) : z.generate(oopts);\n /*jshint -W083 */\n\n if (o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n\n /*jshint +W083 */\n\n if (o.type === \"file\") return write_dl(o.file, out);\n return o.type == \"string\" ? utf8read(out) : out;\n }\n\n function write_cfb_type(wb, opts) {\n var o = opts || {};\n var cfb = write_xlscfb(wb, o);\n return write_cfb_ctr(cfb, o);\n }\n\n function write_string_type(out, opts, bom) {\n if (!bom) bom = \"\";\n var o = bom + out;\n\n switch (opts.type) {\n case \"base64\":\n return Base64.encode(utf8write(o));\n\n case \"binary\":\n return utf8write(o);\n\n case \"string\":\n return out;\n\n case \"file\":\n return write_dl(opts.file, o, 'utf8');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(o, 'utf8');else return write_string_type(o, {\n type: 'binary'\n }).split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function write_stxt_type(out, opts) {\n switch (opts.type) {\n case \"base64\":\n return Base64.encode(out);\n\n case \"binary\":\n return out;\n\n case \"string\":\n return out;\n\n /* override in sheet_to_txt */\n\n case \"file\":\n return write_dl(opts.file, out, 'binary');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(out, 'binary');else return out.split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n /* TODO: test consistency */\n\n\n function write_binary_type(out, opts) {\n switch (opts.type) {\n case \"string\":\n case \"base64\":\n case \"binary\":\n var bstr = \"\"; // $FlowIgnore\n\n for (var i = 0; i < out.length; ++i) {\n bstr += String.fromCharCode(out[i]);\n }\n\n return opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\n case \"file\":\n return write_dl(opts.file, out);\n\n case \"buffer\":\n return out;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n }\n\n function writeSync(wb, opts) {\n reset_cp();\n check_wb(wb);\n var o = opts || {};\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n if (o.type == \"array\") {\n o.type = \"binary\";\n var out = writeSync(wb, o);\n o.type = \"array\";\n return s2ab(out);\n }\n\n switch (o.bookType || 'xlsb') {\n case 'xml':\n case 'xlml':\n return write_string_type(write_xlml(wb, o), o);\n\n case 'slk':\n case 'sylk':\n return write_string_type(write_slk_str(wb, o), o);\n\n case 'htm':\n case 'html':\n return write_string_type(write_htm_str(wb, o), o);\n\n case 'txt':\n return write_stxt_type(write_txt_str(wb, o), o);\n\n case 'csv':\n return write_string_type(write_csv_str(wb, o), o, \"\\uFEFF\");\n\n case 'dif':\n return write_string_type(write_dif_str(wb, o), o);\n\n case 'dbf':\n return write_binary_type(write_dbf_buf(wb, o), o);\n\n case 'prn':\n return write_string_type(write_prn_str(wb, o), o);\n\n case 'rtf':\n return write_string_type(write_rtf_str(wb, o), o);\n\n case 'eth':\n return write_string_type(write_eth_str(wb, o), o);\n\n case 'fods':\n return write_string_type(write_ods(wb, o), o);\n\n case 'biff2':\n if (!o.biff) o.biff = 2;\n\n /* falls through */\n\n case 'biff3':\n if (!o.biff) o.biff = 3;\n\n /* falls through */\n\n case 'biff4':\n if (!o.biff) o.biff = 4;\n return write_binary_type(write_biff_buf(wb, o), o);\n\n case 'biff5':\n if (!o.biff) o.biff = 5;\n\n /* falls through */\n\n case 'biff8':\n case 'xla':\n case 'xls':\n if (!o.biff) o.biff = 8;\n return write_cfb_type(wb, o);\n\n case 'xlsx':\n case 'xlsm':\n case 'xlam':\n case 'xlsb':\n case 'ods':\n return write_zip_type(wb, o);\n\n default:\n throw new Error(\"Unrecognized bookType |\" + o.bookType + \"|\");\n }\n }\n\n function resolve_book_type(o) {\n if (o.bookType) return;\n var _BT = {\n \"xls\": \"biff8\",\n \"htm\": \"html\",\n \"slk\": \"sylk\",\n \"socialcalc\": \"eth\",\n \"Sh33tJS\": \"WTF\"\n };\n var ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n if (ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n o.bookType = _BT[o.bookType] || o.bookType;\n }\n\n function writeFileSync(wb, filename, opts) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n return writeSync(wb, o);\n }\n\n function writeFileAsync(filename, wb, opts, cb) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n o.type = 'buffer';\n var _cb = cb;\n if (!(_cb instanceof Function)) _cb = opts;\n return _fs.writeFile(filename, writeSync(wb, o), _cb);\n }\n\n function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n var rr = encode_row(R);\n var defval = o.defval,\n raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n var isempty = true;\n var row = header === 1 ? [] : {};\n\n if (header !== 1) {\n if (Object.defineProperty) try {\n Object.defineProperty(row, '__rowNum__', {\n value: R,\n enumerable: false\n });\n } catch (e) {\n row.__rowNum__ = R;\n } else row.__rowNum__ = R;\n }\n\n if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n var val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n if (val === undefined || val.t === undefined) {\n if (defval === undefined) continue;\n\n if (hdr[C] != null) {\n row[hdr[C]] = defval;\n }\n\n continue;\n }\n\n var v = val.v;\n\n switch (val.t) {\n case 'z':\n if (v == null) break;\n continue;\n\n case 'e':\n v = void 0;\n break;\n\n case 's':\n case 'd':\n case 'b':\n case 'n':\n break;\n\n default:\n throw new Error('unrecognized type ' + val.t);\n }\n\n if (hdr[C] != null) {\n if (v == null) {\n if (defval !== undefined) row[hdr[C]] = defval;else if (raw && v === null) row[hdr[C]] = null;else continue;\n } else {\n row[hdr[C]] = raw || o.rawNumbers && val.t == \"n\" ? v : format_cell(val, v, o);\n }\n\n if (v != null) isempty = false;\n }\n }\n return {\n row: row,\n isempty: isempty\n };\n }\n\n function sheet_to_json(sheet, opts) {\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;else if (o.header == null) header = 0;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols = [];\n var out = [];\n var outi = 0,\n counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0,\n CC = 0;\n if (dense && !sheet[R]) sheet[R] = [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = 0;\n\n for (CC = 0; CC < hdr.length; ++CC) {\n if (hdr[CC] == vv) vv = v + \"_\" + ++counter;\n }\n\n hdr[C] = vv;\n }\n }\n\n for (R = r.s.r + offset; R <= r.e.r; ++R) {\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n }\n\n out.length = outi;\n return out;\n }\n\n var qreg = /\"/g;\n\n function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n var isempty = true;\n var row = [],\n txt = \"\",\n rr = encode_row(R);\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!cols[C]) continue;\n var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];\n if (val == null) txt = \"\";else if (val.v != null) {\n isempty = false;\n txt = '' + (o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\n for (var i = 0, cc = 0; i !== txt.length; ++i) {\n if ((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {\n txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\";\n break;\n }\n }\n\n if (txt == \"ID\") txt = '\"ID\"';\n } else if (val.f != null && !val.F) {\n isempty = false;\n txt = '=' + val.f;\n if (txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n } else txt = \"\";\n /* NOTE: Excel CSV does not support array formulae */\n\n row.push(txt);\n }\n\n if (o.blankrows === false && isempty) return null;\n return row.join(FS);\n }\n\n function sheet_to_csv(sheet, opts) {\n var out = [];\n var o = opts == null ? {} : opts;\n if (sheet == null || sheet[\"!ref\"] == null) return \"\";\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row = \"\",\n cols = [];\n o.dense = Array.isArray(sheet);\n var colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n if ((rowinfo[R] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\n if (row == null) {\n continue;\n }\n\n if (o.strip) row = row.replace(endregex, \"\");\n out.push(row + RS);\n }\n\n delete o.dense;\n return out.join(\"\");\n }\n\n function sheet_to_txt(sheet, opts) {\n if (!opts) opts = {};\n opts.FS = \"\\t\";\n opts.RS = \"\\n\";\n var s = sheet_to_csv(sheet, opts);\n if (typeof cptable == 'undefined' || opts.type == 'string') return s;\n var o = cptable.utils.encode(1200, s, 'str');\n return String.fromCharCode(255) + String.fromCharCode(254) + o;\n }\n\n function sheet_to_formulae(sheet) {\n var y = \"\",\n x,\n val = \"\";\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var r = safe_decode_range(sheet['!ref']),\n rr = \"\",\n cols = [],\n C;\n var cmds = [];\n var dense = Array.isArray(sheet);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n rr = encode_row(R);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n y = cols[C] + rr;\n x = dense ? (sheet[R] || [])[C] : sheet[y];\n val = \"\";\n if (x === undefined) continue;else if (x.F != null) {\n y = x.F;\n if (!x.f) continue;\n val = x.f;\n if (y.indexOf(\":\") == -1) y = y + \":\" + y;\n }\n if (x.f != null) val = x.f;else if (x.t == 'z') continue;else if (x.t == 'n' && x.v != null) val = \"\" + x.v;else if (x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";else if (x.w !== undefined) val = \"'\" + x.w;else if (x.v === undefined) continue;else if (x.t == 's') val = \"'\" + x.v;else val = \"\" + x.v;\n cmds[cmds.length] = y + \"=\" + val;\n }\n }\n\n return cmds;\n }\n\n function sheet_add_json(_ws, js, opts) {\n var o = opts || {};\n var offset = +!o.skipHeader;\n var ws = _ws || {};\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n }\n\n var cell;\n var range = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: _C,\n r: _R + js.length - 1 + offset\n }\n };\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n\n if (_R == -1) {\n _R = _range.e.r + 1;\n range.e.r = _R + js.length - 1 + offset;\n }\n } else {\n if (_R == -1) {\n _R = 0;\n range.e.r = js.length - 1 + offset;\n }\n }\n\n var hdr = o.header || [],\n C = 0;\n js.forEach(function (JS, R) {\n keys(JS).forEach(function (k) {\n if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;\n var v = JS[k];\n var t = 'z';\n var z = \"\";\n var ref = encode_cell({\n c: _C + C,\n r: _R + R + offset\n });\n cell = utils.sheet_get_cell(ws, ref);\n\n if (v && typeof v === 'object' && !(v instanceof Date)) {\n ws[ref] = v;\n } else {\n if (typeof v == 'number') t = 'n';else if (typeof v == 'boolean') t = 'b';else if (typeof v == 'string') t = 's';else if (v instanceof Date) {\n t = 'd';\n\n if (!o.cellDates) {\n t = 'n';\n v = datenum(v);\n }\n\n z = o.dateNF || SSF._table[14];\n }\n if (!cell) ws[ref] = cell = {\n t: t,\n v: v\n };else {\n cell.t = t;\n cell.v = v;\n delete cell.w;\n delete cell.R;\n if (z) cell.z = z;\n }\n if (z) cell.z = z;\n }\n });\n });\n range.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\n var __R = encode_row(_R);\n\n if (offset) for (C = 0; C < hdr.length; ++C) {\n ws[encode_col(C + _C) + __R] = {\n t: 's',\n v: hdr[C]\n };\n }\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function json_to_sheet(js, opts) {\n return sheet_add_json(null, js, opts);\n }\n\n var utils = {\n encode_col: encode_col,\n encode_row: encode_row,\n encode_cell: encode_cell,\n encode_range: encode_range,\n decode_col: decode_col,\n decode_row: decode_row,\n split_cell: split_cell,\n decode_cell: decode_cell,\n decode_range: decode_range,\n format_cell: format_cell,\n get_formulae: sheet_to_formulae,\n make_csv: sheet_to_csv,\n make_json: sheet_to_json,\n make_formulae: sheet_to_formulae,\n sheet_add_aoa: sheet_add_aoa,\n sheet_add_json: sheet_add_json,\n sheet_add_dom: sheet_add_dom,\n aoa_to_sheet: aoa_to_sheet,\n json_to_sheet: json_to_sheet,\n table_to_sheet: parse_dom_table,\n table_to_book: table_to_book,\n sheet_to_csv: sheet_to_csv,\n sheet_to_txt: sheet_to_txt,\n sheet_to_json: sheet_to_json,\n sheet_to_html: HTML_.from_sheet,\n sheet_to_formulae: sheet_to_formulae,\n sheet_to_row_object_array: sheet_to_json\n };\n\n (function (utils) {\n utils.consts = utils.consts || {};\n\n function add_consts(R\n /*Array*/\n ) {\n R.forEach(function (a) {\n utils.consts[a[0]] = a[1];\n });\n }\n\n function get_default(x, y, z) {\n return x[y] != null ? x[y] : x[y] = z;\n }\n /* get cell, creating a stub if necessary */\n\n\n function ws_get_cell_stub(ws, R, C) {\n /* A1 cell address */\n if (typeof R == \"string\") {\n /* dense */\n if (Array.isArray(ws)) {\n var RC = decode_cell(R);\n if (!ws[RC.r]) ws[RC.r] = [];\n return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {\n t: 'z'\n });\n }\n\n return ws[R] || (ws[R] = {\n t: 'z'\n });\n }\n /* cell address object */\n\n\n if (typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n /* R and C are 0-based indices */\n\n return ws_get_cell_stub(ws, encode_cell({\n r: R,\n c: C || 0\n }));\n }\n\n utils.sheet_get_cell = ws_get_cell_stub;\n /* find sheet index for given name / validate index */\n\n function wb_sheet_idx(wb, sh) {\n if (typeof sh == \"number\") {\n if (sh >= 0 && wb.SheetNames.length > sh) return sh;\n throw new Error(\"Cannot find sheet # \" + sh);\n } else if (typeof sh == \"string\") {\n var idx = wb.SheetNames.indexOf(sh);\n if (idx > -1) return idx;\n throw new Error(\"Cannot find sheet name |\" + sh + \"|\");\n } else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n }\n /* simple blank workbook object */\n\n\n utils.book_new = function () {\n return {\n SheetNames: [],\n Sheets: {}\n };\n };\n /* add a worksheet to the end of a given workbook */\n\n\n utils.book_append_sheet = function (wb, ws, name) {\n if (!name) for (var i = 1; i <= 0xFFFF; ++i, name = undefined) {\n if (wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n }\n if (!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n check_ws_name(name);\n if (wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n wb.SheetNames.push(name);\n wb.Sheets[name] = ws;\n };\n /* set sheet visibility (visible/hidden/very hidden) */\n\n\n utils.book_set_sheet_visibility = function (wb, sh, vis) {\n get_default(wb, \"Workbook\", {});\n get_default(wb.Workbook, \"Sheets\", []);\n var idx = wb_sheet_idx(wb, sh); // $FlowIgnore\n\n get_default(wb.Workbook.Sheets, idx, {});\n\n switch (vis) {\n case 0:\n case 1:\n case 2:\n break;\n\n default:\n throw new Error(\"Bad sheet visibility setting \" + vis);\n } // $FlowIgnore\n\n\n wb.Workbook.Sheets[idx].Hidden = vis;\n };\n\n add_consts([[\"SHEET_VISIBLE\", 0], [\"SHEET_HIDDEN\", 1], [\"SHEET_VERY_HIDDEN\", 2]]);\n /* set number format */\n\n utils.cell_set_number_format = function (cell, fmt) {\n cell.z = fmt;\n return cell;\n };\n /* set cell hyperlink */\n\n\n utils.cell_set_hyperlink = function (cell, target, tooltip) {\n if (!target) {\n delete cell.l;\n } else {\n cell.l = {\n Target: target\n };\n if (tooltip) cell.l.Tooltip = tooltip;\n }\n\n return cell;\n };\n\n utils.cell_set_internal_link = function (cell, range, tooltip) {\n return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip);\n };\n /* add to cell comments */\n\n\n utils.cell_add_comment = function (cell, text, author) {\n if (!cell.c) cell.c = [];\n cell.c.push({\n t: text,\n a: author || \"SheetJS\"\n });\n };\n /* set array formula and flush related cells */\n\n\n utils.sheet_set_array_formula = function (ws, range, formula) {\n var rng = typeof range != \"string\" ? range : safe_decode_range(range);\n var rngstr = typeof range == \"string\" ? range : encode_range(range);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var cell = ws_get_cell_stub(ws, R, C);\n cell.t = 'n';\n cell.F = rngstr;\n delete cell.v;\n if (R == rng.s.r && C == rng.s.c) cell.f = formula;\n }\n }\n\n return ws;\n };\n\n return utils;\n })(utils);\n\n if (has_buf && typeof require != 'undefined') (function () {\n var Readable = require('stream').Readable;\n\n var write_csv_stream = function write_csv_stream(sheet, opts) {\n var stream = Readable();\n var o = opts == null ? {} : opts;\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row = \"\",\n cols = [];\n o.dense = Array.isArray(sheet);\n var colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n var R = r.s.r;\n var BOM = false;\n\n stream._read = function () {\n if (!BOM) {\n BOM = true;\n return stream.push(\"\\uFEFF\");\n }\n\n while (R <= r.e.r) {\n ++R;\n if ((rowinfo[R - 1] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R - 1, cols, fs, rs, FS, o);\n\n if (row != null) {\n if (o.strip) row = row.replace(endregex, \"\");\n stream.push(row + RS);\n break;\n }\n }\n\n if (R > r.e.r) return stream.push(null);\n };\n\n return stream;\n };\n\n var write_html_stream = function write_html_stream(ws, opts) {\n var stream = Readable();\n var o = opts || {};\n var header = o.header != null ? o.header : HTML_.BEGIN;\n var footer = o.footer != null ? o.footer : HTML_.END;\n stream.push(header);\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n stream.push(HTML_._preamble(ws, r, o));\n var R = r.s.r;\n var end = false;\n\n stream._read = function () {\n if (R > r.e.r) {\n if (!end) {\n end = true;\n stream.push(\"
\" + footer);\n }\n\n return stream.push(null);\n }\n\n while (R <= r.e.r) {\n stream.push(HTML_._row(ws, r, R, o));\n ++R;\n break;\n }\n };\n\n return stream;\n };\n\n var write_json_stream = function write_json_stream(sheet, opts) {\n var stream = Readable({\n objectMode: true\n });\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols = [];\n var counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0,\n CC = 0;\n if (dense && !sheet[R]) sheet[R] = [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = 0;\n\n for (CC = 0; CC < hdr.length; ++CC) {\n if (hdr[CC] == vv) vv = v + \"_\" + ++counter;\n }\n\n hdr[C] = vv;\n }\n }\n\n R = r.s.r + offset;\n\n stream._read = function () {\n if (R > r.e.r) return stream.push(null);\n\n while (R <= r.e.r) {\n //if ((rowinfo[R-1]||{}).hidden) continue;\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n ++R;\n\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n stream.push(row.row);\n break;\n }\n }\n };\n\n return stream;\n };\n\n XLSX.stream = {\n to_json: write_json_stream,\n to_html: write_html_stream,\n to_csv: write_csv_stream\n };\n })();\n if (typeof parse_xlscfb !== \"undefined\") XLSX.parse_xlscfb = parse_xlscfb;\n XLSX.parse_zip = parse_zip;\n XLSX.read = readSync; //xlsread\n\n XLSX.readFile = readFileSync; //readFile\n\n XLSX.readFileSync = readFileSync;\n XLSX.write = writeSync;\n XLSX.writeFile = writeFileSync;\n XLSX.writeFileSync = writeFileSync;\n XLSX.writeFileAsync = writeFileAsync;\n XLSX.utils = utils;\n XLSX.SSF = SSF;\n if (typeof CFB !== \"undefined\") XLSX.CFB = CFB;\n}\n/*global define */\n\n\nif (typeof exports !== 'undefined') make_xlsx_lib(exports);else if (typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);else if (typeof define === 'function' && define.amd) define(function () {\n if (!XLSX.version) make_xlsx_lib(XLSX);\n return XLSX;\n});else make_xlsx_lib(XLSX);\n/*exported XLS, ODS */\n\nvar XLS = XLSX,\n ODS = XLSX;"],"sourceRoot":""}