From 0d38d4c0a016029d83a80b2ad6f7af3fd8752c7d Mon Sep 17 00:00:00 2001 From: SheetJS Date: Thu, 2 Apr 2015 16:32:22 -0400 Subject: [PATCH] version bump 0.8.0: unification with js-xls 0.7.5 --- .gitignore | 13 + .jshintrc | 4 + .npmignore | 9 + .travis.yml | 3 +- CONTRIBUTING.md | 18 +- LICENSE | 2 +- Makefile | 8 +- README.md | 92 +- bin/xlsx.njs | 4 +- bits/.npmignore | 1 + bits/00_header.js | 5 +- bits/01_version.js | 2 +- bits/02_codepage.js | 9 +- bits/04_base64.js | 41 + bits/05_buf.js | 16 + bits/11_ssfutils.js | 20 + bits/18_cfb.js | 383 +++ bits/20_jsutils.js | 1 - bits/22_xmlutils.js | 23 +- bits/23_binutils.js | 106 +- bits/24_hoppers.js | 4 +- bits/25_cellutils.js | 21 + bits/26_crypto.js | 35 + bits/28_binstructs.js | 10 +- bits/29_xlsenum.js | 265 ++ bits/36_xlsprops.js | 8 + bits/38_xlstypes.js | 440 +++ bits/39_xlsbiff.js | 917 ++++++ bits/44_offcrypto.js | 180 ++ bits/45_styutils.js | 20 + bits/50_styxls.js | 78 + bits/61_fcommon.js | 17 + bits/62_fxls.js | 803 +++++ bits/63_fbin.js | 2 +- bits/64_ftab.js | 1090 +++++++ bits/68_wsbin.js | 34 +- bits/80_xlml.js | 699 ++++ bits/81_xls.js | 675 ++++ bits/82_parsetab.js | 409 ++- bits/84_defaults.js | 3 +- bits/87_read.js | 33 +- bits/88_write.js | 16 +- bits/90_utils.js | 9 +- bits/98_exports.js | 10 +- bits/99_footer.js | 1 + bower.json | 5 +- dist/LICENSE | 2 +- dist/cpexcel.js | 28 +- dist/ods.js | 6 + dist/xlsx.core.min.js | 17 +- dist/xlsx.core.min.map | 2 +- dist/xlsx.full.min.js | 19 +- dist/xlsx.full.min.map | 2 +- dist/xlsx.js | 6743 +++++++++++++++++++++++++++++++++++++-- dist/xlsx.min.js | 16 +- dist/xlsx.min.map | 2 +- index.html | 61 +- misc/_bower.json | 3 + misc/cfb.d.ts | 104 + misc/strip_sourcemap.sh | 11 + misc/xl.d.ts | 37 +- ods.js | 6 + odsbits/20_jsutils.js | 6 + package.json | 12 +- test.js | 535 ++-- tests.lst | 694 ++++ xlsx.js | 6737 ++++++++++++++++++++++++++++++++++++-- xlsxworker.js | 2 +- xlsxworker1.js | 2 +- xlsxworker2.js | 2 +- 70 files changed, 20750 insertions(+), 843 deletions(-) create mode 100644 .jshintrc create mode 100644 bits/.npmignore create mode 100644 bits/04_base64.js create mode 100644 bits/05_buf.js create mode 100644 bits/11_ssfutils.js create mode 100644 bits/18_cfb.js create mode 100644 bits/25_cellutils.js create mode 100644 bits/26_crypto.js create mode 100644 bits/29_xlsenum.js create mode 100644 bits/36_xlsprops.js create mode 100644 bits/38_xlstypes.js create mode 100644 bits/39_xlsbiff.js create mode 100644 bits/44_offcrypto.js create mode 100644 bits/50_styxls.js create mode 100644 bits/61_fcommon.js create mode 100644 bits/62_fxls.js create mode 100644 bits/64_ftab.js create mode 100644 bits/80_xlml.js create mode 100644 bits/81_xls.js create mode 100644 misc/cfb.d.ts create mode 100755 misc/strip_sourcemap.sh diff --git a/.gitignore b/.gitignore index 2fc4471..b64031e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,19 @@ misc/coverage.html misc/prof.js v8.log tmp +*.txt +*.csv +*.dif +*.prn +*.slk +*.socialcalc +*.xls +*.xlsb +*.xlsm *.xlsx *.xlsm *.xlsb +*.xml +*.htm +*.html +*.sheetjs diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..5cd205b --- /dev/null +++ b/.jshintrc @@ -0,0 +1,4 @@ +{ + "bitwise": false, + "curly": false +} diff --git a/.npmignore b/.npmignore index 67c925a..bd035d9 100644 --- a/.npmignore +++ b/.npmignore @@ -4,11 +4,20 @@ index.html misc/ node_modules tmp +*.txt +*.csv +*.dif +*.prn +*.slk +*.socialcalc *.xls *.xlsb *.xlsm *.xlsx *.xml +*.htm +*.html +*.sheetjs .gitignore .jshintrc CONTRIBUTING.md diff --git a/.travis.yml b/.travis.yml index 5a28536..2cd84a2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: node_js node_js: - - "0.11" + - "iojs" + - "0.11.14" - "0.10" - "0.8" before_install: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 605a3c3..e9642de 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ order to maintain that, every contributor must be vigilant. There have been many projects in the past that have been very lax regarding licensing, and we are of the opinion that those are ticking timebombs and that -no corporate product should depend on them. +no commercial product should depend on them. # Required Reading @@ -17,6 +17,17 @@ These are pretty short reads and emphasize the importance of proper licensing: - http://www.codinghorror.com/blog/2007/04/pick-a-license-any-license.html +# Raising Issues + +Issues should generally be accompanied by test files. Since github does not +support attachments, the best method is to send files to +(subject line should contain issue number or message) or to share using some +storage service. Unless expressly permitted, any attachments will not be +shared or included in a test suite (although I will ask :) + +If sending email to a gmail account is problematic, the email +inbox is self-hosted. + # Pre-Contribution Checklist Before thinking about contributing, make sure that: @@ -27,7 +38,7 @@ Before thinking about contributing, make sure that: Corporation or a subsidiary - You have not consulted any existing relevant codebase (if you have, please -take note of which codebases were consulted). + take note of which codebases were consulted). If you cannot attest to each of these items, the best approach is to raise an issue. If it is a particularly high-priority issue, please drop an email to @@ -45,9 +56,8 @@ Keep these in mind as you work: - You are working on your own time. Unless they explicitly grant permission, your employer may be the ultimate owner of your IP - # Post-Contribution Before contributions are merged, you will receive an email (at the address associated with the git commit) and will be asked to confirm the aforementioned -items. +items. Ensure that the email addresses associated with the commits is valid. diff --git a/LICENSE b/LICENSE index 41dcf0c..f769c2c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2012-2014 SheetJS +Copyright (C) 2012-2015 SheetJS Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Makefile b/Makefile index 2ce4e17..817246f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ LIB=xlsx -FMT=xlsx xlsm xlsb ods misc full +FMT=xlsx xlsm xlsb ods xls xml misc full REQS=jszip.js ADDONS=dist/cpexcel.js AUXTARGETS=ods.js @@ -17,6 +17,9 @@ $(TARGET): $(DEPS) bits/01_version.js: package.json echo "$(ULIB).version = '"`grep version package.json | awk '{gsub(/[^0-9a-z\.-]/,"",$$2); print $$2}'`"';" > $@ +bits/18_cfb.js: node_modules/cfb/dist/xlscfb.js + cp $^ $@ + .PHONY: clean clean: rm -f $(TARGET) @@ -88,8 +91,11 @@ dist: dist-deps $(TARGET) bower.json cp $(TARGET) dist/ cp LICENSE dist/ uglifyjs $(TARGET) -o dist/$(LIB).min.js --source-map dist/$(LIB).min.map --preamble "$$(head -n 1 bits/00_header.js)" + misc/strip_sourcemap.sh dist/$(LIB).min.js uglifyjs $(REQS) $(TARGET) -o dist/$(LIB).core.min.js --source-map dist/$(LIB).core.min.map --preamble "$$(head -n 1 bits/00_header.js)" + misc/strip_sourcemap.sh dist/$(LIB).core.min.js uglifyjs $(REQS) $(ADDONS) $(TARGET) -o dist/$(LIB).full.min.js --source-map dist/$(LIB).full.min.map --preamble "$$(head -n 1 bits/00_header.js)" + misc/strip_sourcemap.sh dist/$(LIB).full.min.js .PHONY: aux aux: $(AUXTARGETS) diff --git a/README.md b/README.md index 759ff5c..ccb430c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,22 @@ # xlsx -Parser and writer for Excel 2007+ (XLSX/XLSM/XLSB) files and parser for ODS. -Pure-JS cleanroom implementation from the Office Open XML spec, [MS-XLSB], ODF -specifications and related documents. +Parser and writer for various spreadsheet formats. Pure-JS cleanroom +implementation from official specifications and related documents. + +Supported read formats: + +- Excel 2007+ XML Formats (XLSX/XLSM) +- Excel 2007+ Binary Format (XLSB) +- Excel 2003-2004 XML Format (XML "SpreadsheetML") +- Excel 97-2004 (XLS BIFF8) +- Excel 5.0/95 (XLS BIFF5) +- OpenDocument Spreadsheet (ODS) + +Supported write formats: + +- XLSX +- CSV (and general DSV) +- JSON and JS objects (various styles) Demo: @@ -10,7 +24,7 @@ Source: ## Installation -In [nodejs](https://www.npmjs.org/package/xlsx): +With [npm](https://www.npmjs.org/package/xlsx): npm install xlsx @@ -18,7 +32,7 @@ In the browser: -In [bower](http://bower.io/search/?q=js-xlsx): +With [bower](http://bower.io/search/?q=js-xlsx): bower install js-xlsx @@ -27,7 +41,7 @@ CDNjs automatically pulls the latest version and makes all versions available at ## Optional Modules -The nodejs version automatically requires modules for additional features. Some +The node version automatically requires modules for additional features. Some of these modules are rather large in size and are only needed in special circumstances, so they do not ship with the core. For browser use, they must be included directly: @@ -56,7 +70,7 @@ To use the shim, add the shim before the script tag that loads xlsx.js: For parsing, the first step is to read the file. This involves acquiring the data and feeding it into the library. Here are a few common scenarios: -- nodejs readFile: +- node readFile: ``` if(typeof require !== 'undefined') XLSX = require('xlsx'); @@ -142,13 +156,32 @@ input_dom_element.addEventListener('change', handleFile, false); ## Working with the Workbook -This example walks through every cell of every sheet and dumps the values: +The full object format is described later in this README. + +This example extracts the value stored in cell A1 from the first worksheet: + +``` +var first_sheet_name = workbook.SheetNames[0]; +var address_of_cell = 'A1'; + +/* Get worksheet */ +var worksheet = workbook.Sheets[first_sheet_name]; + +/* Find desired cell */ +var desired_cell = worksheet[address_of_cell]; + +/* Get the value */ +var desired_value = desired_cell.v; +``` + +This example iterates through every nonempty of every sheet and dumps values: ``` var sheet_name_list = workbook.SheetNames; -sheet_name_list.forEach(function(y) { +sheet_name_list.forEach(function(y) { /* iterate through sheets */ var worksheet = workbook.Sheets[y]; for (z in worksheet) { + /* all keys that do not begin with "!" correspond to cell addresses */ if(z[0] === '!') continue; console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); } @@ -166,9 +199,9 @@ mode is provided for testing. On OSX you can get the base64 encoding with: - XMLHttpRequest -- nodejs +- node -The nodejs version installs a binary `xlsx` which can read XLSX/XLSM/XLSB +The node version installs a command line tool `xlsx` which can read spreadsheet files and output the contents in various formats. The source is available at `xlsx.njs` in the bin directory. @@ -220,7 +253,7 @@ Complete examples: ## Interface -`XLSX` is the exposed variable in the browser and the exported nodejs variable +`XLSX` is the exposed variable in the browser and the exported node variable `XLSX.version` is the version of the library (added by the build script). @@ -374,7 +407,8 @@ Special worksheet keys (accessible as `worksheet[key]`, each starting with `!`): `wb.Sheets[sheetname]` returns an object representing the worksheet. `wb.Props` is an object storing the standard properties. `wb.Custprops` stores -custom properties. +custom properties. Since the XLS standard properties deviate from the XLSX +standard, XLS parsing stores core properties in both places. . ## Parsing Options @@ -383,7 +417,7 @@ The exported `read` and `readFile` functions accept an options argument: | Option Name | Default | Description | | :---------- | ------: | :---------- | -| cellFormula | true | Save formulae to the .f field | +| cellFormula | true | Save formulae to the .f field ** | | cellHTML | true | Parse rich text and save HTML to the .h field | | cellNF | false | Save number format string to the .z field | | cellStyles | false | Save style/theme info to the .s field | @@ -395,17 +429,24 @@ The exported `read` and `readFile` functions accept an options argument: | bookProps | false | If true, only parse enough to get book metadata ** | | bookSheets | false | If true, only parse enough to get the sheet names | | bookVBA | false | If true, expose vbaProject.bin to `vbaraw` field ** | +| password | "" | If defined and file is encrypted, use password ** | +- `cellFormula` option only applies to formats that require extra processing to + parse formulae (XLS/XLSB). - Even if `cellNF` is false, formatted text will be generated and saved to `.w` - In some cases, sheets may be parsed even if `bookSheets` is false. - `bookSheets` and `bookProps` combine to give both sets of information - `Deps` will be an empty object if `bookDeps` is falsy -- `bookFiles` adds a `keys` array (paths in the ZIP) and a `files` hash (whose - keys are paths and values are objects representing the files) +- `bookFiles` behavior depends on file type: + * `keys` array (paths in the ZIP) for ZIP-based formats + * `files` hash (mapping paths to objects representing the files) for ZIP + * `cfb` object for formats using CFB containers - `sheetRows-1` rows will be generated when looking at the JSON object output (since the header row is counted as a row when parsing the data) - `bookVBA` merely exposes the raw vba object. It does not parse the data. - `cellDates` currently does not convert numerical dates to JS dates. +- Currently only XOR encryption is supported. Unsupported error will be thrown + for files employing other encryption methods. The defaults are enumerated in bits/84_defaults.js @@ -430,7 +471,7 @@ The exported `write` and `writeFile` functions accept an options argument: ## Tested Environments - - NodeJS 0.8, 0.10 (latest release), 0.11 (unstable) + - NodeJS 0.8, 0.10 (latest release), 0.11.14 (unstable), io.js - IE 6/7/8/9/10/11 using Base64 mode (IE10/11 using HTML5 mode) - FF 18 using Base64 or HTML5 mode - Chrome 24 using Base64 or HTML5 mode @@ -449,7 +490,7 @@ Running `make init` will refresh the `test_files` submodule and get the files. ## Testing -`make test` will run the nodejs-based tests. To run the in-browser tests, clone +`make test` will run the node-based tests. To run the in-browser tests, clone [the oss.sheetjs.com repo](https://github.com/SheetJS/SheetJS.github.io) and replace the xlsx.js file (then fire up the browser and go to `stress.html`): @@ -481,10 +522,6 @@ $ diff xlsx.js xlsx.new.js To produce the dist files, run `make dist`. The dist files are updated in each version release and should not be committed between versions. -## XLS Support - -XLS is available in [js-xls](http://git.io/xls). - ## License Please consult the attached LICENSE file for details. All rights not explicitly @@ -506,7 +543,18 @@ OSP-covered specifications: - [MS-XLSB]: Excel (.xlsb) Binary File Format - [MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format - [MS-OE376]: Office Implementation Information for ECMA-376 Standards Support + - [MS-CFB]: Compound File Binary File Format + - [MS-XLS]: Excel Binary File Format (.xls) Structure Specification + - [MS-ODATA]: Open Data Protocol (OData) + - [MS-OFFCRYPTO]: Office Document Cryptography Structure + - [MS-OLEDS]: Object Linking and Embedding (OLE) Data Structures + - [MS-OLEPS]: Object Linking and Embedding (OLE) Property Set Data Structures + - [MS-OSHARED]: Office Common Data Types and Objects Structures + - [MS-OVBA]: Office VBA File Format Structure + - [MS-CTXLS]: Excel Custom Toolbar Binary File Format - [MS-XLDM]: Spreadsheet Data Model File Format + - [MS-EXSPXML3]: Excel Calculation Version 2 Web Service XML Schema + - [XLS]: Microsoft Office Excel 97-2007 Binary File Format Specification Open Document Format for Office Applications Version 1.2 (29 September 2011) diff --git a/bin/xlsx.njs b/bin/xlsx.njs index 6de8f43..a9c76b2 100755 --- a/bin/xlsx.njs +++ b/bin/xlsx.njs @@ -1,5 +1,5 @@ #!/usr/bin/env node -/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */ var n = "xlsx"; /* vim: set ts=2 ft=javascript: */ var X = require('../'); @@ -9,6 +9,7 @@ program .usage('[options] [sheetname]') .option('-f, --file ', 'use specified workbook') .option('-s, --sheet ', 'print specified sheet (default first sheet)') + .option('-p, --password ', 'if file is encrypted, try with specified pw') .option('-l, --list-sheets', 'list sheet names and exit') .option('-o, --output ', 'output to specified file') .option('-B, --xlsb', 'emit XLSB to or .xlsb') @@ -67,6 +68,7 @@ if(!fs.existsSync(filename)) { var opts = {}, wb; if(program.listSheets) opts.bookSheets = true; if(program.sheetRows) opts.sheetRows = program.sheetRows; +if(program.password) opts.password = program.password; if(program.xlsx || program.xlsm || program.xlsb) { opts.cellNF = true; if(program.output) sheetname = program.output; diff --git a/bits/.npmignore b/bits/.npmignore new file mode 100644 index 0000000..a6c7c28 --- /dev/null +++ b/bits/.npmignore @@ -0,0 +1 @@ +*.js diff --git a/bits/00_header.js b/bits/00_header.js index 5675ca8..7b557ac 100644 --- a/bits/00_header.js +++ b/bits/00_header.js @@ -1,5 +1,6 @@ -/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */ /* vim: set ts=2: */ /*jshint -W041 */ +/*jshint funcscope:true, eqnull:true */ var XLSX = {}; -(function(XLSX){ +(function make_xlsx(XLSX){ diff --git a/bits/01_version.js b/bits/01_version.js index 9693356..36faf4d 100644 --- a/bits/01_version.js +++ b/bits/01_version.js @@ -1 +1 @@ -XLSX.version = '0.7.12'; +XLSX.version = '0.8.0'; diff --git a/bits/02_codepage.js b/bits/02_codepage.js index a051cbc..6726a6f 100644 --- a/bits/02_codepage.js +++ b/bits/02_codepage.js @@ -1,18 +1,23 @@ -var current_codepage = 1252, current_cptable; +var current_codepage = 1200, current_cptable; if(typeof module !== "undefined" && typeof require !== 'undefined') { if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel'); current_cptable = cptable[current_codepage]; } -function reset_cp() { set_cp(1252); } +function reset_cp() { set_cp(1200); } var set_cp = function(cp) { current_codepage = cp; }; function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; } var debom_xml = function(data) { return data; }; +var _getchar = function _gc1(x) { return String.fromCharCode(x); }; if(typeof cptable !== 'undefined') { set_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; }; debom_xml = function(data) { if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); } return data; }; + _getchar = function _gc2(x) { + if(current_codepage === 1200) return String.fromCharCode(x); + return cptable.utils.decode(current_codepage, [x&255,x>>8])[0]; + }; } diff --git a/bits/04_base64.js b/bits/04_base64.js new file mode 100644 index 0000000..cda6c0f --- /dev/null +++ b/bits/04_base64.js @@ -0,0 +1,41 @@ +var Base64 = (function make_b64(){ + var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + return { + encode: function(input, utf8) { + var o = ""; + var c1, c2, c3, e1, e2, e3, e4; + for(var i = 0; i < input.length; ) { + c1 = input.charCodeAt(i++); + c2 = input.charCodeAt(i++); + c3 = input.charCodeAt(i++); + e1 = c1 >> 2; + e2 = (c1 & 3) << 4 | c2 >> 4; + e3 = (c2 & 15) << 2 | c3 >> 6; + e4 = c3 & 63; + if (isNaN(c2)) { e3 = e4 = 64; } + else if (isNaN(c3)) { e4 = 64; } + o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4); + } + return o; + }, + decode: function b64_decode(input, utf8) { + var o = ""; + var c1, c2, c3; + var e1, e2, e3, e4; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + for(var i = 0; i < input.length;) { + e1 = map.indexOf(input.charAt(i++)); + e2 = map.indexOf(input.charAt(i++)); + e3 = map.indexOf(input.charAt(i++)); + e4 = map.indexOf(input.charAt(i++)); + c1 = e1 << 2 | e2 >> 4; + c2 = (e2 & 15) << 4 | e3 >> 2; + c3 = (e3 & 3) << 6 | e4; + o += String.fromCharCode(c1); + if (e3 != 64) { o += String.fromCharCode(c2); } + if (e4 != 64) { o += String.fromCharCode(c3); } + } + return o; + } + }; +})(); diff --git a/bits/05_buf.js b/bits/05_buf.js new file mode 100644 index 0000000..ab3565d --- /dev/null +++ b/bits/05_buf.js @@ -0,0 +1,16 @@ +var has_buf = (typeof Buffer !== 'undefined'); + +function new_raw_buf(len) { + /* jshint -W056 */ + return new (has_buf ? Buffer : Array)(len); + /* jshint +W056 */ +} + +function s2a(s) { + if(has_buf) return new Buffer(s, "binary"); + return s.split("").map(function(x){ return x.charCodeAt(0) & 0xff; }); +} + +var bconcat = function(bufs) { return [].concat.apply([], bufs); }; + +var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/; diff --git a/bits/11_ssfutils.js b/bits/11_ssfutils.js new file mode 100644 index 0000000..5253ad4 --- /dev/null +++ b/bits/11_ssfutils.js @@ -0,0 +1,20 @@ +/* map from xlml named formats to SSF TODO: localize */ +var XLMLFormatMap = { + "General Number": "General", + "General Date": SSF._table[22], + "Long Date": "dddd, mmmm dd, yyyy", + "Medium Date": SSF._table[15], + "Short Date": SSF._table[14], + "Long Time": SSF._table[19], + "Medium Time": SSF._table[18], + "Short Time": SSF._table[20], + "Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)', + "Fixed": SSF._table[2], + "Standard": SSF._table[4], + "Percent": SSF._table[10], + "Scientific": SSF._table[11], + "Yes/No": '"Yes";"Yes";"No";@', + "True/False": '"True";"True";"False";@', + "On/Off": '"Yes";"Yes";"No";@' +}; + diff --git a/bits/18_cfb.js b/bits/18_cfb.js new file mode 100644 index 0000000..2bb2335 --- /dev/null +++ b/bits/18_cfb.js @@ -0,0 +1,383 @@ +var DO_NOT_EXPORT_CFB = true; +/* cfb.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +/* vim: set ts=2: */ +/*jshint eqnull:true */ + +/* [MS-CFB] v20130118 */ +var CFB = (function _CFB(){ +var exports = {}; +exports.version = '0.10.2'; +function parse(file) { +var mver = 3; // major version +var ssz = 512; // sector size +var nmfs = 0; // number of mini FAT sectors +var ndfs = 0; // number of DIFAT sectors +var dir_start = 0; // first directory sector location +var minifat_start = 0; // first mini FAT sector location +var difat_start = 0; // first mini FAT sector location + +var fat_addrs = []; // locations of FAT sectors + +/* [MS-CFB] 2.2 Compound File Header */ +var blob = file.slice(0,512); +prep_blob(blob, 0); + +/* major version */ +var mv = check_get_mver(blob); +mver = mv[0]; +switch(mver) { + case 3: ssz = 512; break; case 4: ssz = 4096; break; + default: throw "Major Version: Expected 3 or 4 saw " + mver; +} + +/* reprocess header */ +if(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); } +/* Save header for final object */ +var header = file.slice(0,ssz); + +check_shifts(blob, mver); + +// Number of Directory Sectors +var nds = blob.read_shift(4, 'i'); +if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; + +// Number of FAT Sectors +//var nfs = blob.read_shift(4, 'i'); +blob.l += 4; + +// First Directory Sector Location +dir_start = blob.read_shift(4, 'i'); + +// Transaction Signature +blob.l += 4; + +// Mini Stream Cutoff Size +blob.chk('00100000', 'Mini Stream Cutoff Size: '); + +// First Mini FAT Sector Location +minifat_start = blob.read_shift(4, 'i'); + +// Number of Mini FAT Sectors +nmfs = blob.read_shift(4, 'i'); + +// First DIFAT sector location +difat_start = blob.read_shift(4, 'i'); + +// Number of DIFAT Sectors +ndfs = blob.read_shift(4, 'i'); + +// Grab FAT Sector Locations +for(var q, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */ + q = blob.read_shift(4, 'i'); + if(q<0) break; + fat_addrs[j] = q; +} + +/** Break the file up into sectors */ +var sectors = sectorify(file, ssz); + +sleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs); + +/** Chains */ +var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz); + +sector_list[dir_start].name = "!Directory"; +if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT"; +sector_list[fat_addrs[0]].name = "!FAT"; +sector_list.fat_addrs = fat_addrs; +sector_list.ssz = ssz; + +/* [MS-CFB] 2.6.1 Compound File Directory Entry */ +var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {}; +read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); + +build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); + +var root_name = Paths.shift(); +Paths.root = root_name; + +/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */ +var find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name); + +return { + raw: {header: header, sectors: sectors}, + FileIndex: FileIndex, + FullPaths: FullPaths, + FullPathDir: FullPathDir, + find: find_path +}; +} // parse + +/* [MS-CFB] 2.2 Compound File Header -- read up to major version */ +function check_get_mver(blob) { + // header signature 8 + blob.chk(HEADER_SIGNATURE, 'Header Signature: '); + + // clsid 16 + blob.chk(HEADER_CLSID, 'CLSID: '); + + // minor version 2 + var mver = blob.read_shift(2, 'u'); + + return [blob.read_shift(2,'u'), mver]; +} +function check_shifts(blob, mver) { + var shift = 0x09; + + // Byte Order + blob.chk('feff', 'Byte Order: '); + + // Sector Shift + switch((shift = blob.read_shift(2))) { + case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; + case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; + default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + } + + // Mini Sector Shift + blob.chk('0600', 'Mini Sector Shift: '); + + // Reserved + blob.chk('000000000000', 'Reserved: '); +} + +/** Break the file up into sectors */ +function sectorify(file, ssz) { + var nsectors = Math.ceil(file.length/ssz)-1; + var sectors = new Array(nsectors); + for(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz); + sectors[nsectors-1] = file.slice(nsectors*ssz); + return sectors; +} + +/* [MS-CFB] 2.6.4 Red-Black Tree */ +function build_full_paths(FI, FPD, FP, Paths) { + var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; + var dad = new Array(pl), q = new Array(pl); + + for(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; } + + for(; j < q.length; ++j) { + i = q[j]; + L = FI[i].L; R = FI[i].R; C = FI[i].C; + if(dad[i] === i) { + if(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L]; + if(R !== -1 && dad[R] !== R) dad[i] = dad[R]; + } + if(C !== -1 /*NOSTREAM*/) dad[C] = i; + if(L !== -1) { dad[L] = dad[i]; q.push(L); } + if(R !== -1) { dad[R] = dad[i]; q.push(R); } + } + for(i=1; i !== pl; ++i) if(dad[i] === i) { + if(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R]; + else if(L !== -1 && dad[L] !== L) dad[i] = dad[L]; + } + + for(i=1; i < pl; ++i) { + if(FI[i].type === 0 /* unknown */) continue; + j = dad[i]; + if(j === 0) FP[i] = FP[0] + "/" + FP[i]; + else while(j !== 0) { + FP[i] = FP[j] + "/" + FP[i]; + j = dad[j]; + } + dad[i] = 0; + } + + FP[0] += "/"; + for(i=1; i < pl; ++i) { + if(FI[i].type !== 2 /* stream */) FP[i] += "/"; + FPD[FP[i]] = FI[i]; + } +} + +/* [MS-CFB] 2.6.4 */ +function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { + var UCFullPaths = new Array(FullPaths.length); + var UCPaths = new Array(Paths.length), i; + for(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!'); + for(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!'); + return function find_path(path) { + var k; + if(path.charCodeAt(0) === 47 /* "/" */) { k=true; path = root_name + path; } + else k = path.indexOf("/") !== -1; + var UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!'); + var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath); + if(w === -1) return null; + return k === true ? FileIndex[w] : files[Paths[w]]; + }; +} + +/** Chase down the rest of the DIFAT chain to build a comprehensive list + DIFAT chains by storing the next sector number as the last 32 bytes */ +function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { + var q; + if(idx === ENDOFCHAIN) { + if(cnt !== 0) throw "DIFAT chain shorter than expected"; + } else if(idx !== -1 /*FREESECT*/) { + var sector = sectors[idx], m = (ssz>>>2)-1; + for(var i = 0; i < m; ++i) { + if((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break; + fat_addrs.push(q); + } + sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs); + } +} + +/** Follow the linked list of sectors for a given starting point */ +function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { + var sl = sectors.length; + var buf, buf_chain; + if(!chkd) chkd = new Array(sl); + var modulus = ssz - 1, j, jj; + buf = []; + buf_chain = []; + for(j=start; j>=0;) { + chkd[j] = true; + buf[buf.length] = j; + buf_chain.push(sectors[j]); + var addr = fat_addrs[Math.floor(j*4/ssz)]; + jj = ((j*4) & modulus); + if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + j = __readInt32LE(sectors[addr], jj); + } + return {nodes: buf, data:__toBuffer([buf_chain])}; +} + +/** Chase down the sector linked lists */ +function make_sector_list(sectors, dir_start, fat_addrs, ssz) { + var sl = sectors.length, sector_list = new Array(sl); + var chkd = new Array(sl), buf, buf_chain; + var modulus = ssz - 1, i, j, k, jj; + for(i=0; i < sl; ++i) { + buf = []; + k = (i + dir_start); if(k >= sl) k-=sl; + if(chkd[k] === true) continue; + buf_chain = []; + for(j=k; j>=0;) { + chkd[j] = true; + buf[buf.length] = j; + buf_chain.push(sectors[j]); + var addr = fat_addrs[Math.floor(j*4/ssz)]; + jj = ((j*4) & modulus); + if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + j = __readInt32LE(sectors[addr], jj); + } + sector_list[k] = {nodes: buf, data:__toBuffer([buf_chain])}; + } + return sector_list; +} + +/* [MS-CFB] 2.6.1 Compound File Directory Entry */ +function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) { + var blob; + var minifat_store = 0, pl = (Paths.length?2:0); + var sector = sector_list[dir_start].data; + var i = 0, namelen = 0, name, o, ctime, mtime; + for(; i < sector.length; i+= 128) { + blob = sector.slice(i, i+128); + prep_blob(blob, 64); + namelen = blob.read_shift(2); + if(namelen === 0) continue; + name = __utf16le(blob,0,namelen-pl); + Paths.push(name); + o = { + name: name, + type: blob.read_shift(1), + color: blob.read_shift(1), + L: blob.read_shift(4, 'i'), + R: blob.read_shift(4, 'i'), + C: blob.read_shift(4, 'i'), + clsid: blob.read_shift(16), + state: blob.read_shift(4, 'i') + }; + ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2); + if(ctime !== 0) { + o.ctime = ctime; o.ct = read_date(blob, blob.l-8); + } + mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2); + if(mtime !== 0) { + o.mtime = mtime; o.mt = read_date(blob, blob.l-8); + } + o.start = blob.read_shift(4, 'i'); + o.size = blob.read_shift(4, 'i'); + if(o.type === 5) { /* root */ + minifat_store = o.start; + if(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData"; + /*minifat_size = o.size;*/ + } else if(o.size >= 4096 /* MSCSZ */) { + o.storage = 'fat'; + if(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz); + sector_list[o.start].name = o.name; + o.content = sector_list[o.start].data.slice(0,o.size); + prep_blob(o.content, 0); + } else { + o.storage = 'minifat'; + if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) { + o.content = sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size); + prep_blob(o.content, 0); + } + } + files[name] = o; + FileIndex.push(o); + } +} + +function read_date(blob, offset) { + return new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000); +} + +var fs; +function readFileSync(filename, options) { + if(fs === undefined) fs = require('fs'); + return parse(fs.readFileSync(filename), options); +} + +function readSync(blob, options) { + switch(options !== undefined && options.type !== undefined ? options.type : "base64") { + case "file": return readFileSync(blob, options); + case "base64": return parse(s2a(Base64.decode(blob)), options); + case "binary": return parse(s2a(blob), options); + } + return parse(blob); +} + +/** CFB Constants */ +var MSSZ = 64; /* Mini Sector Size = 1<<6 */ +//var MSCSZ = 4096; /* Mini Stream Cutoff Size */ +/* 2.1 Compound File Sector Numbers and Types */ +var ENDOFCHAIN = -2; +/* 2.2 Compound File Header */ +var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1'; +var HEADER_CLSID = '00000000000000000000000000000000'; +var consts = { + /* 2.1 Compund File Sector Numbers and Types */ + MAXREGSECT: -6, + DIFSECT: -4, + FATSECT: -3, + ENDOFCHAIN: ENDOFCHAIN, + FREESECT: -1, + /* 2.2 Compound File Header */ + HEADER_SIGNATURE: HEADER_SIGNATURE, + HEADER_MINOR_VERSION: '3e00', + MAXREGSID: -6, + NOSTREAM: -1, + HEADER_CLSID: HEADER_CLSID, + /* 2.6.1 Compound File Directory Entry */ + EntryTypes: ['unknown','storage','stream','lockbytes','property','root'] +}; + +exports.read = readSync; +exports.parse = parse; +exports.utils = { + ReadShift: ReadShift, + CheckField: CheckField, + prep_blob: prep_blob, + bconcat: bconcat, + consts: consts +}; + +return exports; +})(); + +if(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; } diff --git a/bits/20_jsutils.js b/bits/20_jsutils.js index 3a73f69..bff609c 100644 --- a/bits/20_jsutils.js +++ b/bits/20_jsutils.js @@ -42,4 +42,3 @@ function cc2str(arr) { return o; } -var has_buf = (typeof Buffer !== 'undefined'); diff --git a/bits/22_xmlutils.js b/bits/22_xmlutils.js index b027fb6..e36bf18 100644 --- a/bits/22_xmlutils.js +++ b/bits/22_xmlutils.js @@ -1,4 +1,4 @@ -var attregexg=/\b[\w:]+=["'][^"]*['"]/g; +var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; var tagregex=/<[^>]*>/g; var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/; function parsexmltag(tag, skip_root) { @@ -31,17 +31,27 @@ var rencoding = evert(encodings); var rencstr = "&<>'\"".split(""); // TODO: CP remap (need to read file version to determine OS) -var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g; -function unescapexml(text){ - var s = text + ''; - return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));}); -} +var unescapexml = (function() { + var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g; + return function unescapexml(text){ + var s = text + ''; + return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));}); + }; +})(); + var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g; function escapexml(text){ var s = text + ''; return s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return "_x" + ("000"+s.charCodeAt(0).toString(16)).substr(-4) + "_";}); } +/* TODO: handle codepages */ +var xlml_fixstr = (function() { + var entregex = /&#(\d+);/g; + function entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); } + return function xlml_fixstr(str) { return str.replace(entregex,entrepl); }; +})(); + function parsexmlbool(value, tag) { switch(value) { case '1': case 'true': case 'TRUE': return true; @@ -158,3 +168,4 @@ XMLNS.main = [ 'http://schemas.microsoft.com/office/excel/2006/main', 'http://schemas.microsoft.com/office/excel/2006/2' ]; + diff --git a/bits/23_binutils.js b/bits/23_binutils.js index 78fc662..cb862dc 100644 --- a/bits/23_binutils.js +++ b/bits/23_binutils.js @@ -18,16 +18,39 @@ function readIEEE754(buf, idx, isLE, nl, ml) { var __toBuffer, ___toBuffer; __toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; }; +var __utf16le, ___utf16le; +__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : "";}; +var __lpwstr, ___lpwstr; +__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";}; var __double, ___double; __double = ___double = function(b, idx) { return readIEEE754(b, idx);}; var is_buf = function is_buf_a(a) { return Array.isArray(a); }; if(has_buf) { + __utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); }; + __hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); }; + __lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : "";}; + __lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);}; + __utf8 = function utf8_b(s,e) { return this.toString('utf8',s,e); }; __toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);}; + bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); }; __double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); }; is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); }; } +/* from js-xls */ +if(typeof cptable !== 'undefined') { + __utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); }; + __utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); }; + __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : "";}; + __lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : "";}; +} var __readUInt8 = function(b, idx) { return b[idx]; }; var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; }; @@ -35,20 +58,70 @@ var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; }; var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; }; +var ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); }; +var __unhexlify = typeof Buffer !== "undefined" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify; function ReadShift(size, t) { - var o="", oo=[], w, vv, i, loc; - if(t === 'dbcs') { - loc = this.l; - if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le"); - else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; } - size *= 2; - } else switch(size) { - case 1: o = __readUInt8(this, this.l); break; - case 2: o = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); break; - case 4: o = __readUInt32LE(this, this.l); break; - case 8: if(t === 'f') { o = __double(this, this.l); break; } - } + var o="", oI, oR, oo=[], w, vv, i, loc; + switch(t) { + case 'dbcs': + loc = this.l; + if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le"); + else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; } + size *= 2; + break; + + case 'utf8': o = __utf8(this, this.l, this.l + size); break; + case 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break; + + /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */ + case 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break; + /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */ + case 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\u0000') size += 2; break; + + case 'cstr': size = 0; o = ""; + while((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w)); + o = oo.join(""); break; + case 'wstr': size = 0; o = ""; + while((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;} + size+=2; o = oo.join(""); break; + + /* sbcs and dbcs support continue records in the SST way TODO codepages */ + case 'dbcs-cont': o = ""; loc = this.l; + for(i = 0; i != size; ++i) { + if(this.lens && this.lens.indexOf(loc) !== -1) { + w = __readUInt8(this, loc); + this.l = loc + 1; + vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont'); + return oo.join("") + vv; + } + oo.push(_getchar(__readUInt16LE(this, loc))); + loc+=2; + } o = oo.join(""); size *= 2; break; + + case 'sbcs-cont': o = ""; loc = this.l; + for(i = 0; i != size; ++i) { + if(this.lens && this.lens.indexOf(loc) !== -1) { + w = __readUInt8(this, loc); + this.l = loc + 1; + vv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont'); + return oo.join("") + vv; + } + oo.push(_getchar(__readUInt8(this, loc))); + loc+=1; + } o = oo.join(""); break; + + default: + switch(size) { + case 1: oI = __readUInt8(this, this.l); this.l++; return oI; + case 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI; + case 4: + if(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; } + else { oR = __readUInt32LE(this, this.l); this.l += 4; return oR; } break; + case 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; } + /* falls through */ + case 16: o = __hexlify(this, this.l, size); break; + }} this.l+=size; return o; } @@ -69,9 +142,16 @@ function WriteShift(t, val, f) { this.l += size; return this; } +function CheckField(hexstr, fld) { + var m = __hexlify(this,this.l,hexstr.length>>1); + if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m; + this.l += hexstr.length>>1; +} + function prep_blob(blob, pos) { blob.l = pos; blob.read_shift = ReadShift; + blob.chk = CheckField; blob.write_shift = WriteShift; } @@ -80,7 +160,7 @@ function parsenoop(blob, length) { blob.l += length; } function writenoop(blob, length) { blob.l += length; } function new_buf(sz) { - var o = has_buf ? new Buffer(sz) : new Array(sz); + var o = new_raw_buf(sz); prep_blob(o, 0); return o; } diff --git a/bits/24_hoppers.js b/bits/24_hoppers.js index 3b50126..773362c 100644 --- a/bits/24_hoppers.js +++ b/bits/24_hoppers.js @@ -5,7 +5,7 @@ function recordhopper(data, cb, opts) { while(data.l < data.length) { var RT = data.read_shift(1); if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7); - var R = RecordEnum[RT] || RecordEnum[0xFFFF]; + var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF]; tmpbyte = data.read_shift(1); length = tmpbyte & 0x7F; for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte); @@ -49,7 +49,7 @@ function buf_array() { function write_record(ba, type, payload, length) { var t = evert_RE[type], l; - if(!length) length = RecordEnum[t].p || (payload||[]).length || 0; + if(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0; l = 1 + (t >= 0x80 ? 1 : 0) + 1 + length; if(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l; var o = ba.next(l); diff --git a/bits/25_cellutils.js b/bits/25_cellutils.js new file mode 100644 index 0000000..8ae765b --- /dev/null +++ b/bits/25_cellutils.js @@ -0,0 +1,21 @@ +/* XLS ranges enforced */ +function shift_cell_xls(cell, tgt) { + if(tgt.s) { + if(cell.cRel) cell.c += tgt.s.c; + if(cell.rRel) cell.r += tgt.s.r; + } else { + cell.c += tgt.c; + cell.r += tgt.r; + } + cell.cRel = cell.rRel = 0; + while(cell.c >= 0x100) cell.c -= 0x100; + while(cell.r >= 0x10000) cell.r -= 0x10000; + return cell; +} + +function shift_range_xls(cell, range) { + cell.s = shift_cell_xls(cell.s, range.s); + cell.e = shift_cell_xls(cell.e, range.s); + return cell; +} + diff --git a/bits/26_crypto.js b/bits/26_crypto.js new file mode 100644 index 0000000..db36131 --- /dev/null +++ b/bits/26_crypto.js @@ -0,0 +1,35 @@ +var OFFCRYPTO = {}; +var make_offcrypto = function(O, _crypto) { + var crypto; + if(typeof _crypto !== 'undefined') crypto = _crypto; + else if(typeof require !== 'undefined') { + try { crypto = require('cry'+'pto'); } + catch(e) { crypto = null; } + } + + O.rc4 = function(key, data) { + var S = new Array(256); + var c = 0, i = 0, j = 0, t = 0; + for(i = 0; i != 256; ++i) S[i] = i; + for(i = 0; i != 256; ++i) { + j = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255; + t = S[i]; S[i] = S[j]; S[j] = t; + } + i = j = 0; out = Buffer(data.length); + for(c = 0; c != data.length; ++c) { + i = (i + 1)&255; + j = (j + S[i])%256; + t = S[i]; S[i] = S[j]; S[j] = t; + out[c] = (data[c] ^ S[(S[i]+S[j])&255]); + } + return out; + }; + + if(crypto) { + O.md5 = function(hex) { return crypto.createHash('md5').update(hex).digest('hex'); }; + } else { + O.md5 = function(hex) { throw "unimplemented"; }; + } +}; +make_offcrypto(OFFCRYPTO, typeof crypto !== "undefined" ? crypto : undefined); + diff --git a/bits/28_binstructs.js b/bits/28_binstructs.js index cdca5c9..33f5b86 100644 --- a/bits/28_binstructs.js +++ b/bits/28_binstructs.js @@ -33,14 +33,14 @@ function write_RichStr(str, o) { } /* [MS-XLSB] 2.5.9 */ -function parse_Cell(data) { +function parse_XLSBCell(data) { var col = data.read_shift(4); var iStyleRef = data.read_shift(2); iStyleRef += data.read_shift(1) <<16; var fPhShow = data.read_shift(1); return { c:col, iStyleRef: iStyleRef }; } -function write_Cell(cell, o) { +function write_XLSBCell(cell, o) { if(o == null) o = new_buf(8); o.write_shift(-4, cell.c); o.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s); @@ -50,7 +50,7 @@ function write_Cell(cell, o) { /* [MS-XLSB] 2.5.21 */ -function parse_CodeName (data, length) { return parse_XLWideString(data, length); } +function parse_XLSBCodeName (data, length) { return parse_XLWideString(data, length); } /* [MS-XLSB] 2.5.166 */ function parse_XLNullableWideString(data) { @@ -82,11 +82,12 @@ var write_RelID = write_XLNullableWideString; /* [MS-XLSB] 2.5.122 */ +/* [MS-XLS] 2.5.217 */ function parse_RkNumber(data) { var b = data.slice(data.l, data.l+4); var fX100 = b[0] & 1, fInt = b[0] & 2; data.l+=4; - b[0] &= 0xFC; + b[0] &= 0xFC; // b[0] &= ~3; var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2; return fX100 ? RK/100 : RK; } @@ -111,6 +112,7 @@ function write_UncheckedRfX(r, o) { } /* [MS-XLSB] 2.5.171 */ +/* [MS-XLS] 2.5.342 */ function parse_Xnum(data, length) { return data.read_shift(8, 'f'); } function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, 'f', data); } diff --git a/bits/29_xlsenum.js b/bits/29_xlsenum.js new file mode 100644 index 0000000..f9fc64e --- /dev/null +++ b/bits/29_xlsenum.js @@ -0,0 +1,265 @@ +/* [MS-OLEPS] 2.2 PropertyType */ +{ + var VT_EMPTY = 0x0000; + var VT_NULL = 0x0001; + var VT_I2 = 0x0002; + var VT_I4 = 0x0003; + var VT_R4 = 0x0004; + var VT_R8 = 0x0005; + var VT_CY = 0x0006; + var VT_DATE = 0x0007; + var VT_BSTR = 0x0008; + var VT_ERROR = 0x000A; + var VT_BOOL = 0x000B; + var VT_VARIANT = 0x000C; + var VT_DECIMAL = 0x000E; + var VT_I1 = 0x0010; + var VT_UI1 = 0x0011; + var VT_UI2 = 0x0012; + var VT_UI4 = 0x0013; + var VT_I8 = 0x0014; + var VT_UI8 = 0x0015; + var VT_INT = 0x0016; + var VT_UINT = 0x0017; + var VT_LPSTR = 0x001E; + var VT_LPWSTR = 0x001F; + var VT_FILETIME = 0x0040; + var VT_BLOB = 0x0041; + var VT_STREAM = 0x0042; + var VT_STORAGE = 0x0043; + var VT_STREAMED_Object = 0x0044; + var VT_STORED_Object = 0x0045; + var VT_BLOB_Object = 0x0046; + var VT_CF = 0x0047; + var VT_CLSID = 0x0048; + var VT_VERSIONED_STREAM = 0x0049; + var VT_VECTOR = 0x1000; + var VT_ARRAY = 0x2000; + + var VT_STRING = 0x0050; // 2.3.3.1.11 VtString + var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString + var VT_CUSTOM = [VT_STRING, VT_USTR]; +} + +/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ +var DocSummaryPIDDSI = { + 0x01: { n: 'CodePage', t: VT_I2 }, + 0x02: { n: 'Category', t: VT_STRING }, + 0x03: { n: 'PresentationFormat', t: VT_STRING }, + 0x04: { n: 'ByteCount', t: VT_I4 }, + 0x05: { n: 'LineCount', t: VT_I4 }, + 0x06: { n: 'ParagraphCount', t: VT_I4 }, + 0x07: { n: 'SlideCount', t: VT_I4 }, + 0x08: { n: 'NoteCount', t: VT_I4 }, + 0x09: { n: 'HiddenCount', t: VT_I4 }, + 0x0a: { n: 'MultimediaClipCount', t: VT_I4 }, + 0x0b: { n: 'Scale', t: VT_BOOL }, + 0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT }, + 0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR }, + 0x0e: { n: 'Manager', t: VT_STRING }, + 0x0f: { n: 'Company', t: VT_STRING }, + 0x10: { n: 'LinksDirty', t: VT_BOOL }, + 0x11: { n: 'CharacterCount', t: VT_I4 }, + 0x13: { n: 'SharedDoc', t: VT_BOOL }, + 0x16: { n: 'HLinksChanged', t: VT_BOOL }, + 0x17: { n: 'AppVersion', t: VT_I4, p: 'version' }, + 0x1A: { n: 'ContentType', t: VT_STRING }, + 0x1B: { n: 'ContentStatus', t: VT_STRING }, + 0x1C: { n: 'Language', t: VT_STRING }, + 0x1D: { n: 'Version', t: VT_STRING }, + 0xFF: {} +}; + +/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */ +var SummaryPIDSI = { + 0x01: { n: 'CodePage', t: VT_I2 }, + 0x02: { n: 'Title', t: VT_STRING }, + 0x03: { n: 'Subject', t: VT_STRING }, + 0x04: { n: 'Author', t: VT_STRING }, + 0x05: { n: 'Keywords', t: VT_STRING }, + 0x06: { n: 'Comments', t: VT_STRING }, + 0x07: { n: 'Template', t: VT_STRING }, + 0x08: { n: 'LastAuthor', t: VT_STRING }, + 0x09: { n: 'RevNumber', t: VT_STRING }, + 0x0A: { n: 'EditTime', t: VT_FILETIME }, + 0x0B: { n: 'LastPrinted', t: VT_FILETIME }, + 0x0C: { n: 'CreatedDate', t: VT_FILETIME }, + 0x0D: { n: 'ModifiedDate', t: VT_FILETIME }, + 0x0E: { n: 'PageCount', t: VT_I4 }, + 0x0F: { n: 'WordCount', t: VT_I4 }, + 0x10: { n: 'CharCount', t: VT_I4 }, + 0x11: { n: 'Thumbnail', t: VT_CF }, + 0x12: { n: 'ApplicationName', t: VT_LPSTR }, + 0x13: { n: 'DocumentSecurity', t: VT_I4 }, + 0xFF: {} +}; + +/* [MS-OLEPS] 2.18 */ +var SpecialProperties = { + 0x80000000: { n: 'Locale', t: VT_UI4 }, + 0x80000003: { n: 'Behavior', t: VT_UI4 }, + 0x72627262: {} +}; + +(function() { + for(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y)) + DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; +})(); + +/* [MS-XLS] 2.4.63 Country/Region codes */ +var CountryEnum = { + 0x0001: "US", // United States + 0x0002: "CA", // Canada + 0x0003: "", // Latin America (except Brazil) + 0x0007: "RU", // Russia + 0x0014: "EG", // Egypt + 0x001E: "GR", // Greece + 0x001F: "NL", // Netherlands + 0x0020: "BE", // Belgium + 0x0021: "FR", // France + 0x0022: "ES", // Spain + 0x0024: "HU", // Hungary + 0x0027: "IT", // Italy + 0x0029: "CH", // Switzerland + 0x002B: "AT", // Austria + 0x002C: "GB", // United Kingdom + 0x002D: "DK", // Denmark + 0x002E: "SE", // Sweden + 0x002F: "NO", // Norway + 0x0030: "PL", // Poland + 0x0031: "DE", // Germany + 0x0034: "MX", // Mexico + 0x0037: "BR", // Brazil + 0x003d: "AU", // Australia + 0x0040: "NZ", // New Zealand + 0x0042: "TH", // Thailand + 0x0051: "JP", // Japan + 0x0052: "KR", // Korea + 0x0054: "VN", // Viet Nam + 0x0056: "CN", // China + 0x005A: "TR", // Turkey + 0x0069: "JS", // Ramastan + 0x00D5: "DZ", // Algeria + 0x00D8: "MA", // Morocco + 0x00DA: "LY", // Libya + 0x015F: "PT", // Portugal + 0x0162: "IS", // Iceland + 0x0166: "FI", // Finland + 0x01A4: "CZ", // Czech Republic + 0x0376: "TW", // Taiwan + 0x03C1: "LB", // Lebanon + 0x03C2: "JO", // Jordan + 0x03C3: "SY", // Syria + 0x03C4: "IQ", // Iraq + 0x03C5: "KW", // Kuwait + 0x03C6: "SA", // Saudi Arabia + 0x03CB: "AE", // United Arab Emirates + 0x03CC: "IL", // Israel + 0x03CE: "QA", // Qatar + 0x03D5: "IR", // Iran + 0xFFFF: "US" // United States +}; + +/* [MS-XLS] 2.5.127 */ +var XLSFillPattern = [ + null, + 'solid', + 'mediumGray', + 'darkGray', + 'lightGray', + 'darkHorizontal', + 'darkVertical', + 'darkDown', + 'darkUp', + 'darkGrid', + 'darkTrellis', + 'lightHorizontal', + 'lightVertical', + 'lightDown', + 'lightUp', + 'lightGrid', + 'lightTrellis', + 'gray125', + 'gray0625' +]; + +function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } + +/* [MS-XLS] 2.5.161 */ +var XLSIcv = rgbify([ + /* Color Constants */ + 0x000000, + 0xFFFFFF, + 0xFF0000, + 0x00FF00, + 0x0000FF, + 0xFFFF00, + 0xFF00FF, + 0x00FFFF, + + /* Defaults */ + 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, + + /* Sheet */ + 0xFFFFFF, + 0x000000 +]); + diff --git a/bits/36_xlsprops.js b/bits/36_xlsprops.js new file mode 100644 index 0000000..215b737 --- /dev/null +++ b/bits/36_xlsprops.js @@ -0,0 +1,8 @@ +function xlml_set_prop(Props, tag, val) { + /* TODO: Normalize the properties */ + switch(tag) { + case 'Description': tag = 'Comments'; break; + } + Props[tag] = val; +} + diff --git a/bits/38_xlstypes.js b/bits/38_xlstypes.js new file mode 100644 index 0000000..7744cc2 --- /dev/null +++ b/bits/38_xlstypes.js @@ -0,0 +1,440 @@ +/* [MS-DTYP] 2.3.3 FILETIME */ +/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */ +/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */ +function parse_FILETIME(blob) { + var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4); + return new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\.000/,""); +} + +/* [MS-OSHARED] 2.3.3.1.4 Lpstr */ +function parse_lpstr(blob, type, pad) { + var str = blob.read_shift(0, 'lpstr'); + if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3; + return str; +} + +/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */ +function parse_lpwstr(blob, type, pad) { + var str = blob.read_shift(0, 'lpwstr'); + if(pad) blob.l += (4 - ((str.length+1) & 3)) & 3; + return str; +} + + +/* [MS-OSHARED] 2.3.3.1.11 VtString */ +/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */ +function parse_VtStringBase(blob, stringType, pad) { + if(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob); + return parse_lpstr(blob, stringType, pad); +} + +function parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); } +function parse_VtUnalignedString(blob, t) { if(!t) throw new Error("dafuq?"); return parse_VtStringBase(blob, t, 0); } + +/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */ +function parse_VtVecUnalignedLpstrValue(blob) { + var length = blob.read_shift(4); + var ret = []; + for(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr'); + return ret; +} + +/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */ +function parse_VtVecUnalignedLpstr(blob) { + return parse_VtVecUnalignedLpstrValue(blob); +} + +/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */ +function parse_VtHeadingPair(blob) { + var headingString = parse_TypedPropertyValue(blob, VT_USTR); + var headerParts = parse_TypedPropertyValue(blob, VT_I4); + return [headingString, headerParts]; +} + +/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */ +function parse_VtVecHeadingPairValue(blob) { + var cElements = blob.read_shift(4); + var out = []; + for(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob)); + return out; +} + +/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */ +function parse_VtVecHeadingPair(blob) { + // NOTE: When invoked, wType & padding were already consumed + return parse_VtVecHeadingPairValue(blob); +} + +/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */ +function parse_dictionary(blob,CodePage) { + var cnt = blob.read_shift(4); + var dict = {}; + for(var j = 0; j != cnt; ++j) { + var pid = blob.read_shift(4); + var len = blob.read_shift(4); + dict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!'); + } + if(blob.l & 3) blob.l = (blob.l>>2+1)<<2; + return dict; +} + +/* [MS-OLEPS] 2.9 BLOB */ +function parse_BLOB(blob) { + var size = blob.read_shift(4); + var bytes = blob.slice(blob.l,blob.l+size); + if(size & 3 > 0) blob.l += (4 - (size & 3)) & 3; + return bytes; +} + +/* [MS-OLEPS] 2.11 ClipboardData */ +function parse_ClipboardData(blob) { + // TODO + var o = {}; + o.Size = blob.read_shift(4); + //o.Format = blob.read_shift(4); + blob.l += o.Size; + return o; +} + +/* [MS-OLEPS] 2.14 Vector and Array Property Types */ +function parse_VtVector(blob, cb) { + /* [MS-OLEPS] 2.14.2 VectorHeader */ +/* var Length = blob.read_shift(4); + var o = []; + for(var i = 0; i != Length; ++i) { + o.push(cb(blob)); + } + return o;*/ +} + +/* [MS-OLEPS] 2.15 TypedPropertyValue */ +function parse_TypedPropertyValue(blob, type, _opts) { + var t = blob.read_shift(2), ret, opts = _opts||{}; + blob.l += 2; + if(type !== VT_VARIANT) + if(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t); + switch(type === VT_VARIANT ? t : type) { + case 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret; + case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret; + case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0; + case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret; + case 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,''); + case 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob); + case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob); + case 0x41 /*VT_BLOB*/: return parse_BLOB(blob); + case 0x47 /*VT_CF*/: return parse_ClipboardData(blob); + case 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,''); + case 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t, 4).replace(chr0,''); + case 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob); + case 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob); + default: throw new Error("TypedPropertyValue unrecognized type " + type + " " + t); + } +} +/* [MS-OLEPS] 2.14.2 VectorHeader */ +/*function parse_VTVectorVariant(blob) { + var Length = blob.read_shift(4); + + if(Length & 1 !== 0) throw new Error("VectorHeader Length=" + Length + " must be even"); + var o = []; + for(var i = 0; i != Length; ++i) { + o.push(parse_TypedPropertyValue(blob, VT_VARIANT)); + } + return o; +}*/ + +/* [MS-OLEPS] 2.20 PropertySet */ +function parse_PropertySet(blob, PIDSI) { + var start_addr = blob.l; + var size = blob.read_shift(4); + var NumProps = blob.read_shift(4); + var Props = [], i = 0; + var CodePage = 0; + var Dictionary = -1, DictObj; + for(i = 0; i != NumProps; ++i) { + var PropID = blob.read_shift(4); + var Offset = blob.read_shift(4); + Props[i] = [PropID, Offset + start_addr]; + } + var PropH = {}; + for(i = 0; i != NumProps; ++i) { + if(blob.l !== Props[i][1]) { + var fail = true; + if(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) { + case 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break; + case 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break; + case 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break; + } + if(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; } + if(fail) throw new Error("Read Error: Expected address " + Props[i][1] + ' at ' + blob.l + ' :' + i); + } + if(PIDSI) { + var piddsi = PIDSI[Props[i][0]]; + PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true}); + if(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + String(PropH[piddsi.n] & 0xFFFF); + if(piddsi.n == "CodePage") switch(PropH[piddsi.n]) { + case 0: PropH[piddsi.n] = 1252; + /* falls through */ + case 10000: // OSX Roman + case 1252: // Windows Latin + + case 874: // SB Windows Thai + case 1250: // SB Windows Central Europe + case 1251: // SB Windows Cyrillic + case 1253: // SB Windows Greek + case 1254: // SB Windows Turkish + case 1255: // SB Windows Hebrew + case 1256: // SB Windows Arabic + case 1257: // SB Windows Baltic + case 1258: // SB Windows Vietnam + + case 932: // DB Windows Japanese Shift-JIS + case 936: // DB Windows Simplified Chinese GBK + case 949: // DB Windows Korean + case 950: // DB Windows Traditional Chinese Big5 + + case 1200: // UTF16LE + case 1201: // UTF16BE + case 65000: case -536: // UTF-7 + case 65001: case -535: // UTF-8 + set_cp(CodePage = PropH[piddsi.n]); break; + default: throw new Error("Unsupported CodePage: " + PropH[piddsi.n]); + } + } else { + if(Props[i][0] === 0x1) { + CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2); + set_cp(CodePage); + if(Dictionary !== -1) { + var oldpos = blob.l; + blob.l = Props[Dictionary][1]; + DictObj = parse_dictionary(blob,CodePage); + blob.l = oldpos; + } + } else if(Props[i][0] === 0) { + if(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; } + DictObj = parse_dictionary(blob,CodePage); + } else { + var name = DictObj[Props[i][0]]; + var val; + /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */ + switch(blob[blob.l]) { + case 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break; + case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break; + case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break; + case 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break; + case 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break; + case 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break; + case 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break; + case 0x40 /*VT_FILETIME*/: blob.l += 4; val = new Date(parse_FILETIME(blob)); break; + default: throw new Error("unparsed value: " + blob[blob.l]); + } + PropH[name] = val; + } + } + } + blob.l = start_addr + size; /* step ahead to skip padding */ + return PropH; +} + +/* [MS-OLEPS] 2.21 PropertySetStream */ +function parse_PropertySetStream(file, PIDSI) { + var blob = file.content; + prep_blob(blob, 0); + + var NumSets, FMTID0, FMTID1, Offset0, Offset1; + blob.chk('feff', 'Byte Order: '); + + var vers = blob.read_shift(2); // TODO: check version + var SystemIdentifier = blob.read_shift(4); + blob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: '); + NumSets = blob.read_shift(4); + if(NumSets !== 1 && NumSets !== 2) throw "Unrecognized #Sets: " + NumSets; + FMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4); + + if(NumSets === 1 && Offset0 !== blob.l) throw "Length mismatch"; + else if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); } + var PSet0 = parse_PropertySet(blob, PIDSI); + + var rval = { SystemIdentifier: SystemIdentifier }; + for(var y in PSet0) rval[y] = PSet0[y]; + //rval.blob = blob; + rval.FMTID = FMTID0; + //rval.PSet0 = PSet0; + if(NumSets === 1) return rval; + if(blob.l !== Offset1) throw "Length mismatch 2: " + blob.l + " !== " + Offset1; + var PSet1; + try { PSet1 = parse_PropertySet(blob, null); } catch(e) { } + for(y in PSet1) rval[y] = PSet1[y]; + rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1 + return rval; +} + + +function parsenoop2(blob, length) { blob.read_shift(length); return null; } + +function parslurp(blob, length, cb) { + var arr = [], target = blob.l + length; + while(blob.l < target) arr.push(cb(blob, target - blob.l)); + if(target !== blob.l) throw new Error("Slurp error"); + return arr; +} + +function parslurp2(blob, length, cb) { + var arr = [], target = blob.l + length, len = blob.read_shift(2); + while(len-- !== 0) arr.push(cb(blob, target - blob.l)); + if(target !== blob.l) throw new Error("Slurp error"); + return arr; +} + +function parsebool(blob, length) { return blob.read_shift(length) === 0x1; } + +function parseuint16(blob) { return blob.read_shift(2, 'u'); } +function parseuint16a(blob, length) { return parslurp(blob,length,parseuint16);} + +/* --- 2.5 Structures --- */ + +/* [MS-XLS] 2.5.14 Boolean */ +var parse_Boolean = parsebool; + +/* [MS-XLS] 2.5.10 Bes (boolean or error) */ +function parse_Bes(blob) { + var v = blob.read_shift(1), t = blob.read_shift(1); + return t === 0x01 ? v : v === 0x01; +} + +/* [MS-XLS] 2.5.240 ShortXLUnicodeString */ +function parse_ShortXLUnicodeString(blob, length, opts) { + var cch = blob.read_shift(1); + var width = 1, encoding = 'sbcs-cont'; + var cp = current_codepage; + if(opts && opts.biff >= 8) current_codepage = 1200; + if(opts === undefined || opts.biff !== 5) { + var fHighByte = blob.read_shift(1); + if(fHighByte) { width = 2; encoding = 'dbcs-cont'; } + } + var o = cch ? blob.read_shift(cch, encoding) : ""; + current_codepage = cp; + return o; +} + +/* 2.5.293 XLUnicodeRichExtendedString */ +function parse_XLUnicodeRichExtendedString(blob) { + var cp = current_codepage; + current_codepage = 1200; + var cch = blob.read_shift(2), flags = blob.read_shift(1); + var fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8; + var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs + var cRun, cbExtRst; + var z = {}; + if(fRichSt) cRun = blob.read_shift(2); + if(fExtSt) cbExtRst = blob.read_shift(4); + var encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont'; + var msg = cch === 0 ? "" : blob.read_shift(cch, encoding); + if(fRichSt) blob.l += 4 * cRun; //TODO: parse this + if(fExtSt) blob.l += cbExtRst; //TODO: parse this + z.t = msg; + if(!fRichSt) { z.raw = "" + z.t + ""; z.r = z.t; } + current_codepage = cp; + return z; +} + +/* 2.5.296 XLUnicodeStringNoCch */ +function parse_XLUnicodeStringNoCch(blob, cch, opts) { + var retval; + var fHighByte = blob.read_shift(1); + if(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); } + else { retval = blob.read_shift(cch, 'dbcs-cont'); } + return retval; +} + +/* 2.5.294 XLUnicodeString */ +function parse_XLUnicodeString(blob, length, opts) { + var cch = blob.read_shift(opts !== undefined && opts.biff > 0 && opts.biff < 8 ? 1 : 2); + if(cch === 0) { blob.l++; return ""; } + return parse_XLUnicodeStringNoCch(blob, cch, opts); +} +/* BIFF5 override */ +function parse_XLUnicodeString2(blob, length, opts) { + if(opts.biff !== 5 && opts.biff !== 2) return parse_XLUnicodeString(blob, length, opts); + var cch = blob.read_shift(1); + if(cch === 0) { blob.l++; return ""; } + return blob.read_shift(cch, 'sbcs-cont'); +} + +/* [MS-XLS] 2.5.61 ControlInfo */ +var parse_ControlInfo = parsenoop; + +/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */ +var parse_URLMoniker = function(blob, length) { + var len = blob.read_shift(4), start = blob.l; + var extra = false; + if(len > 24) { + /* look ahead */ + blob.l += len - 24; + if(blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true; + blob.l = start; + } + var url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,""); + if(extra) blob.l += 24; + return url; +}; + +/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */ +var parse_FileMoniker = function(blob, length) { + var cAnti = blob.read_shift(2); + var ansiLength = blob.read_shift(4); + var ansiPath = blob.read_shift(ansiLength, 'cstr'); + var endServer = blob.read_shift(2); + var versionNumber = blob.read_shift(2); + var cbUnicodePathSize = blob.read_shift(4); + if(cbUnicodePathSize === 0) return ansiPath.replace(/\\/g,"/"); + var cbUnicodePathBytes = blob.read_shift(4); + var usKeyValue = blob.read_shift(2); + var unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,""); + return unicodePath; +}; + +/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */ +var parse_HyperlinkMoniker = function(blob, length) { + var clsid = blob.read_shift(16); length -= 16; + switch(clsid) { + case "e0c9ea79f9bace118c8200aa004ba90b": return parse_URLMoniker(blob, length); + case "0303000000000000c000000000000046": return parse_FileMoniker(blob, length); + default: throw "unsupported moniker " + clsid; + } +}; + +/* [MS-OSHARED] 2.3.7.9 HyperlinkString */ +var parse_HyperlinkString = function(blob, length) { + var len = blob.read_shift(4); + var o = blob.read_shift(len, 'utf16le').replace(chr0, ""); + return o; +}; + +/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */ +var parse_Hyperlink = function(blob, length) { + var end = blob.l + length; + var sVer = blob.read_shift(4); + if(sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer); + var flags = blob.read_shift(2); + blob.l += 2; + var displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime; + if(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l); + if(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l); + if((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l); + if((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l); + if(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l); + if(flags & 0x0020) guid = blob.read_shift(16); + if(flags & 0x0040) fileTime = parse_FILETIME(blob, 8); + blob.l = end; + var target = (targetFrameName||moniker||oleMoniker); + if(location) target+="#"+location; + return {Target: target}; +}; + +/* 2.5.178 LongRGBA */ +function parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; } + +/* 2.5.177 LongRGB */ +function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; } + + diff --git a/bits/39_xlsbiff.js b/bits/39_xlsbiff.js new file mode 100644 index 0000000..153b7a4 --- /dev/null +++ b/bits/39_xlsbiff.js @@ -0,0 +1,917 @@ +/* --- MS-XLS --- */ + +/* 2.5.19 */ +function parse_XLSCell(blob, length) { + var rw = blob.read_shift(2); // 0-indexed + var col = blob.read_shift(2); + var ixfe = blob.read_shift(2); + return {r:rw, c:col, ixfe:ixfe}; +} + +/* 2.5.134 */ +function parse_frtHeader(blob) { + var rt = blob.read_shift(2); + var flags = blob.read_shift(2); // TODO: parse these flags + blob.l += 8; + return {type: rt, flags: flags}; +} + + + +function parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts); } + +/* 2.5.158 */ +var HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL']; +var parse_HideObjEnum = parseuint16; + +/* 2.5.344 */ +function parse_XTI(blob, length) { + var iSupBook = blob.read_shift(2), itabFirst = blob.read_shift(2,'i'), itabLast = blob.read_shift(2,'i'); + return [iSupBook, itabFirst, itabLast]; +} + +/* 2.5.218 */ +function parse_RkRec(blob, length) { + var ixfe = blob.read_shift(2); + var RK = parse_RkNumber(blob); + //console.log("::", ixfe, RK,";;"); + return [ixfe, RK]; +} + +/* 2.5.1 */ +function parse_AddinUdf(blob, length) { + blob.l += 4; length -= 4; + var l = blob.l + length; + var udfName = parse_ShortXLUnicodeString(blob, length); + var cb = blob.read_shift(2); + l -= blob.l; + if(cb !== l) throw "Malformed AddinUdf: padding = " + l + " != " + cb; + blob.l += cb; + return udfName; +} + +/* 2.5.209 TODO: Check sizes */ +function parse_Ref8U(blob, length) { + var rwFirst = blob.read_shift(2); + var rwLast = blob.read_shift(2); + var colFirst = blob.read_shift(2); + var colLast = blob.read_shift(2); + return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}}; +} + +/* 2.5.211 */ +function parse_RefU(blob, length) { + var rwFirst = blob.read_shift(2); + var rwLast = blob.read_shift(2); + var colFirst = blob.read_shift(1); + var colLast = blob.read_shift(1); + return {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}}; +} + +/* 2.5.207 */ +var parse_Ref = parse_RefU; + +/* 2.5.143 */ +function parse_FtCmo(blob, length) { + blob.l += 4; + var ot = blob.read_shift(2); + var id = blob.read_shift(2); + var flags = blob.read_shift(2); + blob.l+=12; + return [id, ot, flags]; +} + +/* 2.5.149 */ +function parse_FtNts(blob, length) { + var out = {}; + blob.l += 4; + blob.l += 16; // GUID TODO + out.fSharedNote = blob.read_shift(2); + blob.l += 4; + return out; +} + +/* 2.5.142 */ +function parse_FtCf(blob, length) { + var out = {}; + blob.l += 4; + blob.cf = blob.read_shift(2); + return out; +} + +/* 2.5.140 - 2.5.154 and friends */ +var FtTab = { + 0x15: parse_FtCmo, + 0x13: parsenoop, /* FtLbsData */ + 0x12: function(blob, length) { blob.l += 12; }, /* FtCblsData */ + 0x11: function(blob, length) { blob.l += 8; }, /* FtRboData */ + 0x10: parsenoop, /* FtEdoData */ + 0x0F: parsenoop, /* FtGboData */ + 0x0D: parse_FtNts, /* FtNts */ + 0x0C: function(blob, length) { blob.l += 24; }, /* FtSbs */ + 0x0B: function(blob, length) { blob.l += 10; }, /* FtRbo */ + 0x0A: function(blob, length) { blob.l += 16; }, /* FtCbls */ + 0x09: parsenoop, /* FtPictFmla */ + 0x08: function(blob, length) { blob.l += 6; }, /* FtPioGrbit */ + 0x07: parse_FtCf, /* FtCf */ + 0x06: function(blob, length) { blob.l += 6; }, /* FtGmo */ + 0x04: parsenoop, /* FtMacro */ + 0x00: function(blob, length) { blob.l += 4; } /* FtEnding */ +}; +function parse_FtArray(blob, length, ot) { + var s = blob.l; + var fts = []; + while(blob.l < s + length) { + var ft = blob.read_shift(2); + blob.l-=2; + try { + fts.push(FtTab[ft](blob, s + length - blob.l)); + } catch(e) { blob.l = s + length; return fts; } + } + if(blob.l != s + length) blob.l = s + length; //throw "bad Object Ft-sequence"; + return fts; +} + +/* 2.5.129 */ +var parse_FontIndex = parseuint16; + +/* --- 2.4 Records --- */ + +/* 2.4.21 */ +function parse_BOF(blob, length) { + var o = {}; + o.BIFFVer = blob.read_shift(2); length -= 2; + switch(o.BIFFVer) { + case 0x0600: /* BIFF8 */ + case 0x0500: /* BIFF5 */ + case 0x0002: case 0x0007: /* BIFF2 */ + break; + default: throw "Unexpected BIFF Ver " + o.BIFFVer; + } + blob.read_shift(length); + return o; +} + + +/* 2.4.146 */ +function parse_InterfaceHdr(blob, length) { + if(length === 0) return 0x04b0; + var q; + if((q=blob.read_shift(2))!==0x04b0) throw 'InterfaceHdr codePage ' + q; + return 0x04b0; +} + + +/* 2.4.349 */ +function parse_WriteAccess(blob, length, opts) { + if(opts.enc) { blob.l += length; return ""; } + var l = blob.l; + // TODO: make sure XLUnicodeString doesnt overrun + var UserName = parse_XLUnicodeString(blob, 0, opts); + blob.read_shift(length + l - blob.l); + return UserName; +} + +/* 2.4.28 */ +function parse_BoundSheet8(blob, length, opts) { + var pos = blob.read_shift(4); + var hidden = blob.read_shift(1) >> 6; + var dt = blob.read_shift(1); + switch(dt) { + case 0: dt = 'Worksheet'; break; + case 1: dt = 'Macrosheet'; break; + case 2: dt = 'Chartsheet'; break; + case 6: dt = 'VBAModule'; break; + } + var name = parse_ShortXLUnicodeString(blob, 0, opts); + if(name.length === 0) name = "Sheet1"; + return { pos:pos, hs:hidden, dt:dt, name:name }; +} + +/* 2.4.265 TODO */ +function parse_SST(blob, length) { + var cnt = blob.read_shift(4); + var ucnt = blob.read_shift(4); + var strs = []; + for(var i = 0; i != ucnt; ++i) { + strs.push(parse_XLUnicodeRichExtendedString(blob)); + } + strs.Count = cnt; strs.Unique = ucnt; + return strs; +} + +/* 2.4.107 */ +function parse_ExtSST(blob, length) { + var extsst = {}; + extsst.dsst = blob.read_shift(2); + blob.l += length-2; + return extsst; +} + + +/* 2.4.221 TODO*/ +function parse_Row(blob, length) { + var rw = blob.read_shift(2), col = blob.read_shift(2), Col = blob.read_shift(2), rht = blob.read_shift(2); + blob.read_shift(4); // reserved(2), unused(2) + var flags = blob.read_shift(1); // various flags + blob.read_shift(1); // reserved + blob.read_shift(2); //ixfe, other flags + return {r:rw, c:col, cnt:Col-col}; +} + + +/* 2.4.125 */ +function parse_ForceFullCalculation(blob, length) { + var header = parse_frtHeader(blob); + if(header.type != 0x08A3) throw "Invalid Future Record " + header.type; + var fullcalc = blob.read_shift(4); + return fullcalc !== 0x0; +} + + +var parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */ + + + +/* 2.4.215 rt */ +function parse_RecalcId(blob, length) { + blob.read_shift(2); + return blob.read_shift(4); +} + +/* 2.4.87 */ +function parse_DefaultRowHeight (blob, length) { + var f = blob.read_shift(2), miyRw; + miyRw = blob.read_shift(2); // flags & 0x02 -> hidden, else empty + var fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3}; + return [fl, miyRw]; +} + +/* 2.4.345 TODO */ +function parse_Window1(blob, length) { + var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2); + var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2); + var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2); + return { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur, + FirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio }; +} + +/* 2.4.122 TODO */ +function parse_Font(blob, length, opts) { + blob.l += 14; + var name = parse_ShortXLUnicodeString(blob, 0, opts); + return name; +} + +/* 2.4.149 */ +function parse_LabelSst(blob, length) { + var cell = parse_XLSCell(blob); + cell.isst = blob.read_shift(4); + return cell; +} + +/* 2.4.148 */ +function parse_Label(blob, length, opts) { + var cell = parse_XLSCell(blob, 6); + var str = parse_XLUnicodeString(blob, length-6, opts); + cell.val = str; + return cell; +} + +/* 2.4.126 Number Formats */ +function parse_Format(blob, length, opts) { + var ifmt = blob.read_shift(2); + var fmtstr = parse_XLUnicodeString2(blob, 0, opts); + return [ifmt, fmtstr]; +} + +/* 2.4.90 */ +function parse_Dimensions(blob, length) { + var w = length === 10 ? 2 : 4; + var r = blob.read_shift(w), R = blob.read_shift(w), + c = blob.read_shift(2), C = blob.read_shift(2); + blob.l += 2; + return {s: {r:r, c:c}, e: {r:R, c:C}}; +} + +/* 2.4.220 */ +function parse_RK(blob, length) { + var rw = blob.read_shift(2), col = blob.read_shift(2); + var rkrec = parse_RkRec(blob); + return {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]}; +} + +/* 2.4.175 */ +function parse_MulRk(blob, length) { + var target = blob.l + length - 2; + var rw = blob.read_shift(2), col = blob.read_shift(2); + var rkrecs = []; + while(blob.l < target) rkrecs.push(parse_RkRec(blob)); + if(blob.l !== target) throw "MulRK read error"; + var lastcol = blob.read_shift(2); + if(rkrecs.length != lastcol - col + 1) throw "MulRK length mismatch"; + return {r:rw, c:col, C:lastcol, rkrec:rkrecs}; +} + +/* 2.5.20 2.5.249 TODO */ +function parse_CellStyleXF(blob, length, style) { + var o = {}; + var a = blob.read_shift(4), b = blob.read_shift(4); + var c = blob.read_shift(4), d = blob.read_shift(2); + o.patternType = XLSFillPattern[c >> 26]; + o.icvFore = d & 0x7F; + o.icvBack = (d >> 7) & 0x7F; + return o; +} +function parse_CellXF(blob, length) {return parse_CellStyleXF(blob,length,0);} +function parse_StyleXF(blob, length) {return parse_CellStyleXF(blob,length,1);} + +/* 2.4.353 TODO: actually do this right */ +function parse_XF(blob, length) { + var o = {}; + o.ifnt = blob.read_shift(2); o.ifmt = blob.read_shift(2); o.flags = blob.read_shift(2); + o.fStyle = (o.flags >> 2) & 0x01; + length -= 6; + o.data = parse_CellStyleXF(blob, length, o.fStyle); + return o; +} + +/* 2.4.134 */ +function parse_Guts(blob, length) { + blob.l += 4; + var out = [blob.read_shift(2), blob.read_shift(2)]; + if(out[0] !== 0) out[0]--; + if(out[1] !== 0) out[1]--; + if(out[0] > 7 || out[1] > 7) throw "Bad Gutters: " + out; + return out; +} + +/* 2.4.24 */ +function parse_BoolErr(blob, length) { + var cell = parse_XLSCell(blob, 6); + var val = parse_Bes(blob, 2); + cell.val = val; + cell.t = (val === true || val === false) ? 'b' : 'e'; + return cell; +} + +/* 2.4.180 Number */ +function parse_Number(blob, length) { + var cell = parse_XLSCell(blob, 6); + var xnum = parse_Xnum(blob, 8); + cell.val = xnum; + return cell; +} + +var parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136 + +/* 2.4.271 */ +function parse_SupBook(blob, length, opts) { + var end = blob.l + length; + var ctab = blob.read_shift(2); + var cch = blob.read_shift(2); + var virtPath; + if(cch >=0x01 && cch <=0xff) virtPath = parse_XLUnicodeStringNoCch(blob, cch); + var rgst = blob.read_shift(end - blob.l); + opts.sbcch = cch; + return [cch, ctab, virtPath, rgst]; +} + +/* 2.4.105 TODO */ +function parse_ExternName(blob, length, opts) { + var flags = blob.read_shift(2); + var body; + var o = { + fBuiltIn: flags & 0x01, + fWantAdvise: (flags >>> 1) & 0x01, + fWantPict: (flags >>> 2) & 0x01, + fOle: (flags >>> 3) & 0x01, + fOleLink: (flags >>> 4) & 0x01, + cf: (flags >>> 5) & 0x3FF, + fIcon: flags >>> 15 & 0x01 + }; + if(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2); + //else throw new Error("unsupported SupBook cch: " + opts.sbcch); + o.body = body || blob.read_shift(length-2); + return o; +} + +/* 2.4.150 TODO */ +function parse_Lbl(blob, length, opts) { + if(opts.biff < 8) return parse_Label(blob, length, opts); + var target = blob.l + length; + var flags = blob.read_shift(2); + var chKey = blob.read_shift(1); + var cch = blob.read_shift(1); + var cce = blob.read_shift(2); + blob.l += 2; + var itab = blob.read_shift(2); + blob.l += 4; + var name = parse_XLUnicodeStringNoCch(blob, cch, opts); + var rgce = parse_NameParsedFormula(blob, target - blob.l, opts, cce); + return { + chKey: chKey, + Name: name, + rgce: rgce + }; +} + +/* 2.4.106 TODO: verify supbook manipulation */ +function parse_ExternSheet(blob, length, opts) { + if(opts.biff < 8) return parse_ShortXLUnicodeString(blob, length, opts); + var o = parslurp2(blob,length,parse_XTI); + var oo = []; + if(opts.sbcch === 0x0401) { + for(var i = 0; i != o.length; ++i) oo.push(opts.snames[o[i][1]]); + return oo; + } + else return o; +} + +/* 2.4.260 */ +function parse_ShrFmla(blob, length, opts) { + var ref = parse_RefU(blob, 6); + blob.l++; + var cUse = blob.read_shift(1); + length -= 8; + return [parse_SharedParsedFormula(blob, length, opts), cUse]; +} + +/* 2.4.4 TODO */ +function parse_Array(blob, length, opts) { + var ref = parse_Ref(blob, 6); + blob.l += 6; length -= 12; /* TODO: fAlwaysCalc */ + return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)]; +} + +/* 2.4.173 */ +function parse_MTRSettings(blob, length) { + var fMTREnabled = blob.read_shift(4) !== 0x00; + var fUserSetThreadCount = blob.read_shift(4) !== 0x00; + var cUserThreadCount = blob.read_shift(4); + return [fMTREnabled, fUserSetThreadCount, cUserThreadCount]; +} + +/* 2.5.186 TODO: BIFF5 */ +function parse_NoteSh(blob, length, opts) { + if(opts.biff < 8) return; + var row = blob.read_shift(2), col = blob.read_shift(2); + var flags = blob.read_shift(2), idObj = blob.read_shift(2); + var stAuthor = parse_XLUnicodeString2(blob, 0, opts); + if(opts.biff < 8) blob.read_shift(1); + return [{r:row,c:col}, stAuthor, idObj, flags]; +} + +/* 2.4.179 */ +function parse_Note(blob, length, opts) { + /* TODO: Support revisions */ + return parse_NoteSh(blob, length, opts); +} + +/* 2.4.168 */ +function parse_MergeCells(blob, length) { + var merges = []; + var cmcs = blob.read_shift(2); + while (cmcs--) merges.push(parse_Ref8U(blob,length)); + return merges; +} + +/* 2.4.181 TODO: parse all the things! */ +function parse_Obj(blob, length) { + var cmo = parse_FtCmo(blob, 22); // id, ot, flags + var fts = parse_FtArray(blob, length-22, cmo[1]); + return { cmo: cmo, ft:fts }; +} + +/* 2.4.329 TODO: parse properly */ +function parse_TxO(blob, length, opts) { + var s = blob.l; +try { + blob.l += 4; + var ot = (opts.lastobj||{cmo:[0,0]}).cmo[1]; + var controlInfo; + if([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6; + else controlInfo = parse_ControlInfo(blob, 6, opts); + var cchText = blob.read_shift(2); + var cbRuns = blob.read_shift(2); + var ifntEmpty = parse_FontIndex(blob, 2); + var len = blob.read_shift(2); + blob.l += len; + //var fmla = parse_ObjFmla(blob, s + length - blob.l); + + var texts = ""; + for(var i = 1; i < blob.lens.length-1; ++i) { + if(blob.l-s != blob.lens[i]) throw "TxO: bad continue record"; + var hdr = blob[blob.l]; + var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1); + texts += t; + if(texts.length >= (hdr ? cchText : 2*cchText)) break; + } + if(texts.length !== cchText && texts.length !== cchText*2) { + throw "cchText: " + cchText + " != " + texts.length; + } + + blob.l = s + length; + /* 2.5.272 TxORuns */ +// var rgTxoRuns = []; +// for(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8; +// var cchText2 = blob.read_shift(2); +// if(cchText2 !== cchText) throw "TxOLastRun mismatch: " + cchText2 + " " + cchText; +// blob.l += 6; +// if(s + length != blob.l) throw "TxO " + (s + length) + ", at " + blob.l; + return { t: texts }; +} catch(e) { blob.l = s + length; return { t: texts||"" }; } +} + +/* 2.4.140 */ +var parse_HLink = function(blob, length) { + var ref = parse_Ref8U(blob, 8); + blob.l += 16; /* CLSID */ + var hlink = parse_Hyperlink(blob, length-24); + return [ref, hlink]; +}; + +/* 2.4.141 */ +var parse_HLinkTooltip = function(blob, length) { + var end = blob.l + length; + blob.read_shift(2); + var ref = parse_Ref8U(blob, 8); + var wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont'); + wzTooltip = wzTooltip.replace(chr0,""); + return [ref, wzTooltip]; +}; + +/* 2.4.63 */ +function parse_Country(blob, length) { + var o = [], d; + d = blob.read_shift(2); o[0] = CountryEnum[d] || d; + d = blob.read_shift(2); o[1] = CountryEnum[d] || d; + return o; +} + +/* 2.4.50 ClrtClient */ +function parse_ClrtClient(blob, length) { + var ccv = blob.read_shift(2); + var o = []; + while(ccv-->0) o.push(parse_LongRGB(blob, 8)); + return o; +} + +/* 2.4.188 */ +function parse_Palette(blob, length) { + var ccv = blob.read_shift(2); + var o = []; + while(ccv-->0) o.push(parse_LongRGB(blob, 8)); + return o; +} + +/* 2.4.354 */ +function parse_XFCRC(blob, length) { + blob.l += 2; + var o = {cxfs:0, crc:0}; + o.cxfs = blob.read_shift(2); + o.crc = blob.read_shift(4); + return o; +} + + +var parse_Style = parsenoop; +var parse_StyleExt = parsenoop; + +var parse_ColInfo = parsenoop; + +var parse_Window2 = parsenoop; + + +var parse_Backup = parsebool; /* 2.4.14 */ +var parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */ +var parse_BottomMargin = parse_Xnum; /* 2.4.27 */ +var parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ +var parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */ +var parse_CalcDelta = parse_Xnum; /* 2.4.32 */ +var parse_CalcIter = parsebool; /* 2.4.33 1=iterative calc */ +var parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */ +var parse_CalcPrecision = parsebool; /* 2.4.35 */ +var parse_CalcRefMode = parsenoop2; /* 2.4.36 */ +var parse_CalcSaveRecalc = parsebool; /* 2.4.37 */ +var parse_CodePage = parseuint16; /* 2.4.52 */ +var parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */ +var parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */ +var parse_DefColWidth = parseuint16; /* 2.4.89 */ +var parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */ +var parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */ +var parse_EOF = parsenoop2; /* 2.4.103 */ +var parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */ +var parse_FeatHdr = parsenoop2; /* 2.4.112 */ +var parse_FontX = parseuint16; /* 2.4.123 */ +var parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */ +var parse_GridSet = parseuint16; /* 2.4.132, =1 */ +var parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */ +var parse_Header = parse_XLHeaderFooter; /* 2.4.136 */ +var parse_HideObj = parse_HideObjEnum; /* 2.4.139 */ +var parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */ +var parse_LeftMargin = parse_Xnum; /* 2.4.151 */ +var parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */ +var parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */ +var parse_Password = parseuint16; /* 2.4.191 */ +var parse_PrintGrid = parsebool; /* 2.4.202 */ +var parse_PrintRowCol = parsebool; /* 2.4.203 */ +var parse_PrintSize = parseuint16; /* 2.4.204 0:3 */ +var parse_Prot4Rev = parsebool; /* 2.4.205 */ +var parse_Prot4RevPass = parseuint16; /* 2.4.206 */ +var parse_Protect = parsebool; /* 2.4.207 */ +var parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */ +var parse_RightMargin = parse_Xnum; /* 2.4.219 */ +var parse_RRTabId = parseuint16a; /* 2.4.241 */ +var parse_ScenarioProtect = parsebool; /* 2.4.245 */ +var parse_Scl = parseuint16a; /* 2.4.247 num, den */ +var parse_String = parse_XLUnicodeString; /* 2.4.268 */ +var parse_SxBool = parsebool; /* 2.4.274 */ +var parse_TopMargin = parse_Xnum; /* 2.4.328 */ +var parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */ +var parse_VCenter = parsebool; /* 2.4.342 */ +var parse_WinProtect = parsebool; /* 2.4.347 */ +var parse_WriteProtect = parsenoop; /* 2.4.350 empty record */ + + +/* ---- */ +var parse_VerticalPageBreaks = parsenoop; +var parse_HorizontalPageBreaks = parsenoop; +var parse_Selection = parsenoop; +var parse_Continue = parsenoop; +var parse_Pane = parsenoop; +var parse_Pls = parsenoop; +var parse_DCon = parsenoop; +var parse_DConRef = parsenoop; +var parse_DConName = parsenoop; +var parse_XCT = parsenoop; +var parse_CRN = parsenoop; +var parse_FileSharing = parsenoop; +var parse_Uncalced = parsenoop; +var parse_Template = parsenoop; +var parse_Intl = parsenoop; +var parse_WsBool = parsenoop; +var parse_Sort = parsenoop; +var parse_Sync = parsenoop; +var parse_LPr = parsenoop; +var parse_DxGCol = parsenoop; +var parse_FnGroupName = parsenoop; +var parse_FilterMode = parsenoop; +var parse_AutoFilterInfo = parsenoop; +var parse_AutoFilter = parsenoop; +var parse_Setup = parsenoop; +var parse_ScenMan = parsenoop; +var parse_SCENARIO = parsenoop; +var parse_SxView = parsenoop; +var parse_Sxvd = parsenoop; +var parse_SXVI = parsenoop; +var parse_SxIvd = parsenoop; +var parse_SXLI = parsenoop; +var parse_SXPI = parsenoop; +var parse_DocRoute = parsenoop; +var parse_RecipName = parsenoop; +var parse_MulBlank = parsenoop; +var parse_SXDI = parsenoop; +var parse_SXDB = parsenoop; +var parse_SXFDB = parsenoop; +var parse_SXDBB = parsenoop; +var parse_SXNum = parsenoop; +var parse_SxErr = parsenoop; +var parse_SXInt = parsenoop; +var parse_SXString = parsenoop; +var parse_SXDtr = parsenoop; +var parse_SxNil = parsenoop; +var parse_SXTbl = parsenoop; +var parse_SXTBRGIITM = parsenoop; +var parse_SxTbpg = parsenoop; +var parse_ObProj = parsenoop; +var parse_SXStreamID = parsenoop; +var parse_DBCell = parsenoop; +var parse_SXRng = parsenoop; +var parse_SxIsxoper = parsenoop; +var parse_BookBool = parsenoop; +var parse_DbOrParamQry = parsenoop; +var parse_OleObjectSize = parsenoop; +var parse_SXVS = parsenoop; +var parse_BkHim = parsenoop; +var parse_MsoDrawingGroup = parsenoop; +var parse_MsoDrawing = parsenoop; +var parse_MsoDrawingSelection = parsenoop; +var parse_PhoneticInfo = parsenoop; +var parse_SxRule = parsenoop; +var parse_SXEx = parsenoop; +var parse_SxFilt = parsenoop; +var parse_SxDXF = parsenoop; +var parse_SxItm = parsenoop; +var parse_SxName = parsenoop; +var parse_SxSelect = parsenoop; +var parse_SXPair = parsenoop; +var parse_SxFmla = parsenoop; +var parse_SxFormat = parsenoop; +var parse_SXVDEx = parsenoop; +var parse_SXFormula = parsenoop; +var parse_SXDBEx = parsenoop; +var parse_RRDInsDel = parsenoop; +var parse_RRDHead = parsenoop; +var parse_RRDChgCell = parsenoop; +var parse_RRDRenSheet = parsenoop; +var parse_RRSort = parsenoop; +var parse_RRDMove = parsenoop; +var parse_RRFormat = parsenoop; +var parse_RRAutoFmt = parsenoop; +var parse_RRInsertSh = parsenoop; +var parse_RRDMoveBegin = parsenoop; +var parse_RRDMoveEnd = parsenoop; +var parse_RRDInsDelBegin = parsenoop; +var parse_RRDInsDelEnd = parsenoop; +var parse_RRDConflict = parsenoop; +var parse_RRDDefName = parsenoop; +var parse_RRDRstEtxp = parsenoop; +var parse_LRng = parsenoop; +var parse_CUsr = parsenoop; +var parse_CbUsr = parsenoop; +var parse_UsrInfo = parsenoop; +var parse_UsrExcl = parsenoop; +var parse_FileLock = parsenoop; +var parse_RRDInfo = parsenoop; +var parse_BCUsrs = parsenoop; +var parse_UsrChk = parsenoop; +var parse_UserBView = parsenoop; +var parse_UserSViewBegin = parsenoop; // overloaded +var parse_UserSViewEnd = parsenoop; +var parse_RRDUserView = parsenoop; +var parse_Qsi = parsenoop; +var parse_CondFmt = parsenoop; +var parse_CF = parsenoop; +var parse_DVal = parsenoop; +var parse_DConBin = parsenoop; +var parse_Lel = parsenoop; +var parse_XLSCodeName = parse_XLUnicodeString; +var parse_SXFDBType = parsenoop; +var parse_ObNoMacros = parsenoop; +var parse_Dv = parsenoop; +var parse_Index = parsenoop; +var parse_Table = parsenoop; +var parse_BigName = parsenoop; +var parse_ContinueBigName = parsenoop; +var parse_WebPub = parsenoop; +var parse_QsiSXTag = parsenoop; +var parse_DBQueryExt = parsenoop; +var parse_ExtString = parsenoop; +var parse_TxtQry = parsenoop; +var parse_Qsir = parsenoop; +var parse_Qsif = parsenoop; +var parse_RRDTQSIF = parsenoop; +var parse_OleDbConn = parsenoop; +var parse_WOpt = parsenoop; +var parse_SXViewEx = parsenoop; +var parse_SXTH = parsenoop; +var parse_SXPIEx = parsenoop; +var parse_SXVDTEx = parsenoop; +var parse_SXViewEx9 = parsenoop; +var parse_ContinueFrt = parsenoop; +var parse_RealTimeData = parsenoop; +var parse_ChartFrtInfo = parsenoop; +var parse_FrtWrapper = parsenoop; +var parse_StartBlock = parsenoop; +var parse_EndBlock = parsenoop; +var parse_StartObject = parsenoop; +var parse_EndObject = parsenoop; +var parse_CatLab = parsenoop; +var parse_YMult = parsenoop; +var parse_SXViewLink = parsenoop; +var parse_PivotChartBits = parsenoop; +var parse_FrtFontList = parsenoop; +var parse_SheetExt = parsenoop; +var parse_BookExt = parsenoop; +var parse_SXAddl = parsenoop; +var parse_CrErr = parsenoop; +var parse_HFPicture = parsenoop; +var parse_Feat = parsenoop; +var parse_DataLabExt = parsenoop; +var parse_DataLabExtContents = parsenoop; +var parse_CellWatch = parsenoop; +var parse_FeatHdr11 = parsenoop; +var parse_Feature11 = parsenoop; +var parse_DropDownObjIds = parsenoop; +var parse_ContinueFrt11 = parsenoop; +var parse_DConn = parsenoop; +var parse_List12 = parsenoop; +var parse_Feature12 = parsenoop; +var parse_CondFmt12 = parsenoop; +var parse_CF12 = parsenoop; +var parse_CFEx = parsenoop; +var parse_AutoFilter12 = parsenoop; +var parse_ContinueFrt12 = parsenoop; +var parse_MDTInfo = parsenoop; +var parse_MDXStr = parsenoop; +var parse_MDXTuple = parsenoop; +var parse_MDXSet = parsenoop; +var parse_MDXProp = parsenoop; +var parse_MDXKPI = parsenoop; +var parse_MDB = parsenoop; +var parse_PLV = parsenoop; +var parse_DXF = parsenoop; +var parse_TableStyles = parsenoop; +var parse_TableStyle = parsenoop; +var parse_TableStyleElement = parsenoop; +var parse_NamePublish = parsenoop; +var parse_NameCmt = parsenoop; +var parse_SortData = parsenoop; +var parse_GUIDTypeLib = parsenoop; +var parse_FnGrp12 = parsenoop; +var parse_NameFnGrp12 = parsenoop; +var parse_HeaderFooter = parsenoop; +var parse_CrtLayout12 = parsenoop; +var parse_CrtMlFrt = parsenoop; +var parse_CrtMlFrtContinue = parsenoop; +var parse_ShapePropsStream = parsenoop; +var parse_TextPropsStream = parsenoop; +var parse_RichTextStream = parsenoop; +var parse_CrtLayout12A = parsenoop; +var parse_Units = parsenoop; +var parse_Chart = parsenoop; +var parse_Series = parsenoop; +var parse_DataFormat = parsenoop; +var parse_LineFormat = parsenoop; +var parse_MarkerFormat = parsenoop; +var parse_AreaFormat = parsenoop; +var parse_PieFormat = parsenoop; +var parse_AttachedLabel = parsenoop; +var parse_SeriesText = parsenoop; +var parse_ChartFormat = parsenoop; +var parse_Legend = parsenoop; +var parse_SeriesList = parsenoop; +var parse_Bar = parsenoop; +var parse_Line = parsenoop; +var parse_Pie = parsenoop; +var parse_Area = parsenoop; +var parse_Scatter = parsenoop; +var parse_CrtLine = parsenoop; +var parse_Axis = parsenoop; +var parse_Tick = parsenoop; +var parse_ValueRange = parsenoop; +var parse_CatSerRange = parsenoop; +var parse_AxisLine = parsenoop; +var parse_CrtLink = parsenoop; +var parse_DefaultText = parsenoop; +var parse_Text = parsenoop; +var parse_ObjectLink = parsenoop; +var parse_Frame = parsenoop; +var parse_Begin = parsenoop; +var parse_End = parsenoop; +var parse_PlotArea = parsenoop; +var parse_Chart3d = parsenoop; +var parse_PicF = parsenoop; +var parse_DropBar = parsenoop; +var parse_Radar = parsenoop; +var parse_Surf = parsenoop; +var parse_RadarArea = parsenoop; +var parse_AxisParent = parsenoop; +var parse_LegendException = parsenoop; +var parse_ShtProps = parsenoop; +var parse_SerToCrt = parsenoop; +var parse_AxesUsed = parsenoop; +var parse_SBaseRef = parsenoop; +var parse_SerParent = parsenoop; +var parse_SerAuxTrend = parsenoop; +var parse_IFmtRecord = parsenoop; +var parse_Pos = parsenoop; +var parse_AlRuns = parsenoop; +var parse_BRAI = parsenoop; +var parse_SerAuxErrBar = parsenoop; +var parse_SerFmt = parsenoop; +var parse_Chart3DBarShape = parsenoop; +var parse_Fbi = parsenoop; +var parse_BopPop = parsenoop; +var parse_AxcExt = parsenoop; +var parse_Dat = parsenoop; +var parse_PlotGrowth = parsenoop; +var parse_SIIndex = parsenoop; +var parse_GelFrame = parsenoop; +var parse_BopPopCustom = parsenoop; +var parse_Fbi2 = parsenoop; + +/* --- Specific to versions before BIFF8 --- */ +function parse_BIFF5String(blob) { + var len = blob.read_shift(1); + return blob.read_shift(len, 'sbcs-cont'); +} + +/* BIFF2_??? where ??? is the name from [XLS] */ +function parse_BIFF2STR(blob, length, opts) { + var cell = parse_XLSCell(blob, 6); + ++blob.l; + var str = parse_XLUnicodeString2(blob, length-7, opts); + cell.val = str; + return cell; +} + +function parse_BIFF2NUM(blob, length, opts) { + var cell = parse_XLSCell(blob, 6); + ++blob.l; + var num = parse_Xnum(blob, 8); + cell.val = num; + return cell; +} + diff --git a/bits/44_offcrypto.js b/bits/44_offcrypto.js new file mode 100644 index 0000000..48d920e --- /dev/null +++ b/bits/44_offcrypto.js @@ -0,0 +1,180 @@ +function _JS2ANSI(str) { if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); return str.split("").map(function(x) { return x.charCodeAt(0); }); } + +/* [MS-OFFCRYPTO] 2.1.4 Version */ +function parse_Version(blob, length) { + var o = {}; + o.Major = blob.read_shift(2); + o.Minor = blob.read_shift(2); + return o; +} +/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */ +function parse_EncryptionHeader(blob, length) { + var o = {}; + o.Flags = blob.read_shift(4); + + // Check if SizeExtra is 0x00000000 + var tmp = blob.read_shift(4); + if(tmp !== 0) throw 'Unrecognized SizeExtra: ' + tmp; + + o.AlgID = blob.read_shift(4); + switch(o.AlgID) { + case 0: case 0x6801: case 0x660E: case 0x660F: case 0x6610: break; + default: throw 'Unrecognized encryption algorithm: ' + o.AlgID; + } + parsenoop(blob, length-12); + return o; +} + +/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */ +function parse_EncryptionVerifier(blob, length) { + return parsenoop(blob, length); +} +/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */ +function parse_RC4CryptoHeader(blob, length) { + var o = {}; + var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4; + if(vers.Minor != 2) throw 'unrecognized minor version code: ' + vers.Minor; + if(vers.Major > 4 || vers.Major < 2) throw 'unrecognized major version code: ' + vers.Major; + o.Flags = blob.read_shift(4); length -= 4; + var sz = blob.read_shift(4); length -= 4; + o.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz; + o.EncryptionVerifier = parse_EncryptionVerifier(blob, length); + return o; +} +/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */ +function parse_RC4Header(blob, length) { + var o = {}; + var vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4; + if(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor; + o.Salt = blob.read_shift(16); + o.EncryptedVerifier = blob.read_shift(16); + o.EncryptedVerifierHash = blob.read_shift(16); + return o; +} + +/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */ +function crypto_CreatePasswordVerifier_Method1(Password) { + var Verifier = 0x0000, PasswordArray; + var PasswordDecoded = _JS2ANSI(Password); + var len = PasswordDecoded.length + 1, i, PasswordByte; + var Intermediate1, Intermediate2, Intermediate3; + PasswordArray = new_raw_buf(len); + PasswordArray[0] = PasswordDecoded.length; + for(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1]; + for(i = len-1; i >= 0; --i) { + PasswordByte = PasswordArray[i]; + Intermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1; + Intermediate2 = (Verifier << 1) & 0x7FFF; + Intermediate3 = Intermediate1 | Intermediate2; + Verifier = Intermediate3 ^ PasswordByte; + } + return Verifier ^ 0xCE4B; +} + +/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */ +var crypto_CreateXorArray_Method1 = (function() { + var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00]; + var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3]; + 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]; + var Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; }; + var XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); }; + var CreateXorKey_Method1 = function(Password) { + var XorKey = InitialCode[Password.length - 1]; + var CurrentElement = 0x68; + for(var i = Password.length-1; i >= 0; --i) { + var Char = Password[i]; + for(var j = 0; j != 7; ++j) { + if(Char & 0x40) XorKey ^= XorMatrix[CurrentElement]; + Char *= 2; --CurrentElement; + } + } + return XorKey; + }; + return function(password) { + var Password = _JS2ANSI(password); + var XorKey = CreateXorKey_Method1(Password); + var Index = Password.length; + var ObfuscationArray = new_raw_buf(16); + for(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00; + var Temp, PasswordLastChar, PadIndex; + if((Index & 1) === 1) { + Temp = XorKey >> 8; + ObfuscationArray[Index] = XorRor(PadArray[0], Temp); + --Index; + Temp = XorKey & 0xFF; + PasswordLastChar = Password[Password.length - 1]; + ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp); + } + while(Index > 0) { + --Index; + Temp = XorKey >> 8; + ObfuscationArray[Index] = XorRor(Password[Index], Temp); + --Index; + Temp = XorKey & 0xFF; + ObfuscationArray[Index] = XorRor(Password[Index], Temp); + } + Index = 15; + PadIndex = 15 - Password.length; + while(PadIndex > 0) { + Temp = XorKey >> 8; + ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp); + --Index; + --PadIndex; + Temp = XorKey & 0xFF; + ObfuscationArray[Index] = XorRor(Password[Index], Temp); + --Index; + --PadIndex; + } + return ObfuscationArray; + }; +})(); + +/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */ +var crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) { + /* If XorArray is set, use it; if O is not set, make changes in-place */ + if(!O) O = Data; + if(!XorArray) XorArray = crypto_CreateXorArray_Method1(password); + var Index, Value; + for(Index = 0; Index != Data.length; ++Index) { + Value = Data[Index]; + Value ^= XorArray[XorArrayIndex]; + Value = ((Value>>5) | (Value<<3)) & 0xFF; + O[Index] = Value; + ++XorArrayIndex; + } + return [O, XorArrayIndex, XorArray]; +}; + +var crypto_MakeXorDecryptor = function(password) { + var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password); + return function(Data) { + var O = crypto_DecryptData_Method1(null, Data, XorArrayIndex, XorArray); + XorArrayIndex = O[1]; + return O[0]; + }; +}; + +/* 2.5.343 */ +function parse_XORObfuscation(blob, length, opts, out) { + var o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) }; + if(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password); + out.valid = o.verificationBytes === o.verifier; + if(out.valid) out.insitu_decrypt = crypto_MakeXorDecryptor(opts.password); + return o; +} + +/* 2.4.117 */ +function parse_FilePassHeader(blob, length, oo) { + var o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2; + if(o.Info === 1) o.Data = parse_RC4Header(blob, length); + else o.Data = parse_RC4CryptoHeader(blob, length); + return o; +} +function parse_FilePass(blob, length, opts) { + var o = { Type: blob.read_shift(2) }; /* wEncryptionType */ + if(o.Type) parse_FilePassHeader(blob, length-2, o); + else parse_XORObfuscation(blob, length-2, opts, o); + return o; +} + + diff --git a/bits/45_styutils.js b/bits/45_styutils.js index 76afdd4..16d30bc 100644 --- a/bits/45_styutils.js +++ b/bits/45_styutils.js @@ -62,3 +62,23 @@ function find_mdw(collw, coll) { if(MDW === MAX_MDW) MDW = DEF_MDW; } } + +/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */ +var XLMLPatternTypeMap = { + "None": "none", + "Solid": "solid", + "Gray50": "mediumGray", + "Gray75": "darkGray", + "Gray25": "lightGray", + "HorzStripe": "darkHorizontal", + "VertStripe": "darkVertical", + "ReverseDiagStripe": "darkDown", + "DiagStripe": "darkUp", + "DiagCross": "darkGrid", + "ThickDiagCross": "darkTrellis", + "ThinHorzStripe": "lightHorizontal", + "ThinVertStripe": "lightVertical", + "ThinReverseDiagStripe": "lightDown", + "ThinHorzCross": "lightGrid" +}; + diff --git a/bits/50_styxls.js b/bits/50_styxls.js new file mode 100644 index 0000000..32804ea --- /dev/null +++ b/bits/50_styxls.js @@ -0,0 +1,78 @@ +/* [MS-XLS] 2.4.326 TODO: payload is a zip file */ +function parse_Theme(blob, length) { + var dwThemeVersion = blob.read_shift(4); + if(dwThemeVersion === 124226) return; + blob.l += length-4; +} + +/* 2.5.49 */ +function parse_ColorTheme(blob, length) { return blob.read_shift(4); } + +/* 2.5.155 */ +function parse_FullColorExt(blob, length) { + var o = {}; + o.xclrType = blob.read_shift(2); + o.nTintShade = blob.read_shift(2); + switch(o.xclrType) { + case 0: blob.l += 4; break; + case 1: o.xclrValue = parse_IcvXF(blob, 4); break; + case 2: o.xclrValue = parse_LongRGBA(blob, 4); break; + case 3: o.xclrValue = parse_ColorTheme(blob, 4); break; + case 4: blob.l += 4; break; + } + blob.l += 8; + return o; +} + +/* 2.5.164 TODO: read 7 bits*/ +function parse_IcvXF(blob, length) { + return parsenoop(blob, length); +} + +/* 2.5.280 */ +function parse_XFExtGradient(blob, length) { + return parsenoop(blob, length); +} + +/* 2.5.108 */ +function parse_ExtProp(blob, length) { + var extType = blob.read_shift(2); + var cb = blob.read_shift(2); + var o = [extType]; + switch(extType) { + case 0x04: case 0x05: case 0x07: case 0x08: + case 0x09: case 0x0A: case 0x0B: case 0x0D: + o[1] = parse_FullColorExt(blob, cb); break; + case 0x06: o[1] = parse_XFExtGradient(blob, cb); break; + case 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break; + default: throw new Error("Unrecognized ExtProp type: " + extType + " " + cb); + } + return o; +} + +/* 2.4.355 */ +function parse_XFExt(blob, length) { + var end = blob.l + length; + blob.l += 2; + var ixfe = blob.read_shift(2); + blob.l += 2; + var cexts = blob.read_shift(2); + var ext = []; + while(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l)); + return {ixfe:ixfe, ext:ext}; +} + +/* xf is an XF, see parse_XFExt for xfext */ +function update_xfext(xf, xfext) { + xfext.forEach(function(xfe) { + switch(xfe[0]) { /* 2.5.108 extPropData */ + case 0x04: break; /* foreground color */ + case 0x05: break; /* background color */ + case 0x07: case 0x08: case 0x09: case 0x0a: break; + case 0x0d: break; /* text color */ + case 0x0e: break; /* font scheme */ + default: throw "bafuq" + xfe[0].toString(16); + } + }); +} + diff --git a/bits/61_fcommon.js b/bits/61_fcommon.js new file mode 100644 index 0000000..08a9754 --- /dev/null +++ b/bits/61_fcommon.js @@ -0,0 +1,17 @@ +/* TODO: it will be useful to parse the function str */ +var rc_to_a1 = (function(){ + var rcregex = /(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g; + var rcbase; + function rcfunc($$,$1,$2,$3,$4,$5) { + var R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0; + if(C<0 && $4.length === 0) C=0; + if($4.length > 0) C += rcbase.c; + if($2.length > 0) R += rcbase.r; + return $1 + encode_col(C) + encode_row(R); + } + return function rc_to_a1(fstr, base) { + rcbase = base; + return fstr.replace(rcregex, rcfunc); + }; +})(); + diff --git a/bits/62_fxls.js b/bits/62_fxls.js new file mode 100644 index 0000000..45c9d0e --- /dev/null +++ b/bits/62_fxls.js @@ -0,0 +1,803 @@ +/* --- formula references point to MS-XLS --- */ +/* Small helpers */ +function parseread(l) { return function(blob, length) { blob.l+=l; return; }; } +function parseread1(blob, length) { blob.l+=1; return; } + +/* Rgce Helpers */ + +/* 2.5.51 */ +function parse_ColRelU(blob, length) { + var c = blob.read_shift(2); + return [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1]; +} + +/* 2.5.198.105 */ +function parse_RgceArea(blob, length) { + var r=blob.read_shift(2), R=blob.read_shift(2); + var c=parse_ColRelU(blob, 2); + var C=parse_ColRelU(blob, 2); + return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} }; +} + +/* 2.5.198.105 TODO */ +function parse_RgceAreaRel(blob, length) { + var r=blob.read_shift(2), R=blob.read_shift(2); + var c=parse_ColRelU(blob, 2); + var C=parse_ColRelU(blob, 2); + return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} }; +} + +/* 2.5.198.109 */ +function parse_RgceLoc(blob, length) { + var r = blob.read_shift(2); + var c = parse_ColRelU(blob, 2); + return {r:r, c:c[0], cRel:c[1], rRel:c[2]}; +} + +/* 2.5.198.111 */ +function parse_RgceLocRel(blob, length) { + var r = blob.read_shift(2); + var cl = blob.read_shift(2); + var cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14; + cl &= 0x3FFF; + if(cRel !== 0) while(cl >= 0x100) cl -= 0x100; + return {r:r,c:cl,cRel:cRel,rRel:rRel}; +} + +/* Ptg Tokens */ + +/* 2.5.198.27 */ +function parse_PtgArea(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + var area = parse_RgceArea(blob, 8); + return [type, area]; +} + +/* 2.5.198.28 */ +function parse_PtgArea3d(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + var ixti = blob.read_shift(2); + var area = parse_RgceArea(blob, 8); + return [type, ixti, area]; +} + +/* 2.5.198.29 */ +function parse_PtgAreaErr(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + blob.l += 8; + return [type]; +} +/* 2.5.198.30 */ +function parse_PtgAreaErr3d(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + var ixti = blob.read_shift(2); + blob.l += 8; + return [type, ixti]; +} + +/* 2.5.198.31 */ +function parse_PtgAreaN(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + var area = parse_RgceAreaRel(blob, 8); + return [type, area]; +} + +/* 2.5.198.32 -- ignore this and look in PtgExtraArray for shape + values */ +function parse_PtgArray(blob, length) { + var type = (blob[blob.l++] & 0x60) >> 5; + blob.l += 7; + return [type]; +} + +/* 2.5.198.33 */ +function parse_PtgAttrBaxcel(blob, length) { + var bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */ + var bitBaxcel = 1; + blob.l += 4; + return [bitSemi, bitBaxcel]; +} + +/* 2.5.198.34 */ +function parse_PtgAttrChoose(blob, length) { + blob.l +=2; + var offset = blob.read_shift(2); + var o = []; + /* offset is 1 less than the number of elements */ + for(var i = 0; i <= offset; ++i) o.push(blob.read_shift(2)); + return o; +} + +/* 2.5.198.35 */ +function parse_PtgAttrGoto(blob, length) { + var bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0; + blob.l += 2; + return [bitGoto, blob.read_shift(2)]; +} + +/* 2.5.198.36 */ +function parse_PtgAttrIf(blob, length) { + var bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0; + blob.l += 2; + return [bitIf, blob.read_shift(2)]; +} + +/* 2.5.198.37 */ +function parse_PtgAttrSemi(blob, length) { + var bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0; + blob.l += 4; + return [bitSemi]; +} + +/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */ +function parse_PtgAttrSpaceType(blob, length) { + var type = blob.read_shift(1), cch = blob.read_shift(1); + return [type, cch]; +} + +/* 2.5.198.38 */ +function parse_PtgAttrSpace(blob, length) { + blob.read_shift(2); + return parse_PtgAttrSpaceType(blob, 2); +} + +/* 2.5.198.39 */ +function parse_PtgAttrSpaceSemi(blob, length) { + blob.read_shift(2); + return parse_PtgAttrSpaceType(blob, 2); +} + +/* 2.5.198.84 TODO */ +function parse_PtgRef(blob, length) { + var ptg = blob[blob.l] & 0x1F; + var type = (blob[blob.l] & 0x60)>>5; + blob.l += 1; + var loc = parse_RgceLoc(blob,4); + return [type, loc]; +} + +/* 2.5.198.88 TODO */ +function parse_PtgRefN(blob, length) { + var ptg = blob[blob.l] & 0x1F; + var type = (blob[blob.l] & 0x60)>>5; + blob.l += 1; + var loc = parse_RgceLocRel(blob,4); + return [type, loc]; +} + +/* 2.5.198.85 TODO */ +function parse_PtgRef3d(blob, length) { + var ptg = blob[blob.l] & 0x1F; + var type = (blob[blob.l] & 0x60)>>5; + blob.l += 1; + var ixti = blob.read_shift(2); // XtiIndex + var loc = parse_RgceLoc(blob,4); + return [type, ixti, loc]; +} + + +/* 2.5.198.62 TODO */ +function parse_PtgFunc(blob, length) { + var ptg = blob[blob.l] & 0x1F; + var type = (blob[blob.l] & 0x60)>>5; + blob.l += 1; + var iftab = blob.read_shift(2); + return [FtabArgc[iftab], Ftab[iftab]]; +} +/* 2.5.198.63 TODO */ +function parse_PtgFuncVar(blob, length) { + blob.l++; + var cparams = blob.read_shift(1), tab = parsetab(blob); + return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]]; +} + +function parsetab(blob, length) { + return [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF]; +} + +/* 2.5.198.41 */ +var parse_PtgAttrSum = parseread(4); +/* 2.5.198.43 */ +var parse_PtgConcat = parseread1; + +/* 2.5.198.58 */ +function parse_PtgExp(blob, length) { + blob.l++; + var row = blob.read_shift(2); + var col = blob.read_shift(2); + return [row, col]; +} + +/* 2.5.198.57 */ +function parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; } + +/* 2.5.198.66 TODO */ +function parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); } + +/* 2.5.198.42 */ +function parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;} + +/* 2.5.198.79 */ +function parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); } + +/* 2.5.198.89 */ +function parse_PtgStr(blob, length) { blob.l++; return parse_ShortXLUnicodeString(blob); } + +/* 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */ +function parse_SerAr(blob) { + var val = []; + switch((val[0] = blob.read_shift(1))) { + /* 2.5.192.113 */ + case 0x04: /* SerBool -- boolean */ + val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE'; + blob.l += 7; break; + /* 2.5.192.114 */ + case 0x10: /* SerErr -- error */ + val[1] = BErr[blob[blob.l]]; + blob.l += 8; break; + /* 2.5.192.115 */ + case 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */ + blob.l += 8; break; + /* 2.5.192.116 */ + case 0x01: /* SerNum -- Xnum */ + val[1] = parse_Xnum(blob, 8); break; + /* 2.5.192.117 */ + case 0x02: /* SerStr -- XLUnicodeString (<256 chars) */ + val[1] = parse_XLUnicodeString(blob); break; + // default: throw "Bad SerAr: " + val[0]; /* Unreachable */ + } + return val; +} + +/* 2.5.198.61 */ +function parse_PtgExtraMem(blob, cce) { + var count = blob.read_shift(2); + var out = []; + for(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8)); + return out; +} + +/* 2.5.198.59 */ +function parse_PtgExtraArray(blob) { + var cols = 1 + blob.read_shift(1); //DColByteU + var rows = 1 + blob.read_shift(2); //DRw + for(var i = 0, o=[]; i != rows && (o[i] = []); ++i) + for(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob); + return o; +} + +/* 2.5.198.76 */ +function parse_PtgName(blob, length) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + var nameindex = blob.read_shift(4); + return [type, 0, nameindex]; +} + +/* 2.5.198.77 */ +function parse_PtgNameX(blob, length) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + var ixti = blob.read_shift(2); // XtiIndex + var nameindex = blob.read_shift(4); + return [type, ixti, nameindex]; +} + +/* 2.5.198.70 */ +function parse_PtgMemArea(blob, length) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + blob.l += 4; + var cce = blob.read_shift(2); + return [type, cce]; +} + +/* 2.5.198.72 */ +function parse_PtgMemFunc(blob, length) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + var cce = blob.read_shift(2); + return [type, cce]; +} + + +/* 2.5.198.86 */ +function parse_PtgRefErr(blob, length) { + var type = (blob.read_shift(1) >>> 5) & 0x03; + blob.l += 4; + return [type]; +} + +/* 2.5.198.26 */ +var parse_PtgAdd = parseread1; +/* 2.5.198.45 */ +var parse_PtgDiv = parseread1; +/* 2.5.198.56 */ +var parse_PtgEq = parseread1; +/* 2.5.198.64 */ +var parse_PtgGe = parseread1; +/* 2.5.198.65 */ +var parse_PtgGt = parseread1; +/* 2.5.198.67 */ +var parse_PtgIsect = parseread1; +/* 2.5.198.68 */ +var parse_PtgLe = parseread1; +/* 2.5.198.69 */ +var parse_PtgLt = parseread1; +/* 2.5.198.74 */ +var parse_PtgMissArg = parseread1; +/* 2.5.198.75 */ +var parse_PtgMul = parseread1; +/* 2.5.198.78 */ +var parse_PtgNe = parseread1; +/* 2.5.198.80 */ +var parse_PtgParen = parseread1; +/* 2.5.198.81 */ +var parse_PtgPercent = parseread1; +/* 2.5.198.82 */ +var parse_PtgPower = parseread1; +/* 2.5.198.83 */ +var parse_PtgRange = parseread1; +/* 2.5.198.90 */ +var parse_PtgSub = parseread1; +/* 2.5.198.93 */ +var parse_PtgUminus = parseread1; +/* 2.5.198.94 */ +var parse_PtgUnion = parseread1; +/* 2.5.198.95 */ +var parse_PtgUplus = parseread1; + +/* 2.5.198.71 */ +var parse_PtgMemErr = parsenoop; +/* 2.5.198.73 */ +var parse_PtgMemNoMem = parsenoop; +/* 2.5.198.87 */ +var parse_PtgRefErr3d = parsenoop; +/* 2.5.198.92 */ +var parse_PtgTbl = parsenoop; + +/* 2.5.198.25 */ +var PtgTypes = { + 0x01: { n:'PtgExp', f:parse_PtgExp }, + 0x02: { n:'PtgTbl', f:parse_PtgTbl }, + 0x03: { n:'PtgAdd', f:parse_PtgAdd }, + 0x04: { n:'PtgSub', f:parse_PtgSub }, + 0x05: { n:'PtgMul', f:parse_PtgMul }, + 0x06: { n:'PtgDiv', f:parse_PtgDiv }, + 0x07: { n:'PtgPower', f:parse_PtgPower }, + 0x08: { n:'PtgConcat', f:parse_PtgConcat }, + 0x09: { n:'PtgLt', f:parse_PtgLt }, + 0x0A: { n:'PtgLe', f:parse_PtgLe }, + 0x0B: { n:'PtgEq', f:parse_PtgEq }, + 0x0C: { n:'PtgGe', f:parse_PtgGe }, + 0x0D: { n:'PtgGt', f:parse_PtgGt }, + 0x0E: { n:'PtgNe', f:parse_PtgNe }, + 0x0F: { n:'PtgIsect', f:parse_PtgIsect }, + 0x10: { n:'PtgUnion', f:parse_PtgUnion }, + 0x11: { n:'PtgRange', f:parse_PtgRange }, + 0x12: { n:'PtgUplus', f:parse_PtgUplus }, + 0x13: { n:'PtgUminus', f:parse_PtgUminus }, + 0x14: { n:'PtgPercent', f:parse_PtgPercent }, + 0x15: { n:'PtgParen', f:parse_PtgParen }, + 0x16: { n:'PtgMissArg', f:parse_PtgMissArg }, + 0x17: { n:'PtgStr', f:parse_PtgStr }, + 0x1C: { n:'PtgErr', f:parse_PtgErr }, + 0x1D: { n:'PtgBool', f:parse_PtgBool }, + 0x1E: { n:'PtgInt', f:parse_PtgInt }, + 0x1F: { n:'PtgNum', f:parse_PtgNum }, + 0x20: { n:'PtgArray', f:parse_PtgArray }, + 0x21: { n:'PtgFunc', f:parse_PtgFunc }, + 0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar }, + 0x23: { n:'PtgName', f:parse_PtgName }, + 0x24: { n:'PtgRef', f:parse_PtgRef }, + 0x25: { n:'PtgArea', f:parse_PtgArea }, + 0x26: { n:'PtgMemArea', f:parse_PtgMemArea }, + 0x27: { n:'PtgMemErr', f:parse_PtgMemErr }, + 0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem }, + 0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc }, + 0x2A: { n:'PtgRefErr', f:parse_PtgRefErr }, + 0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr }, + 0x2C: { n:'PtgRefN', f:parse_PtgRefN }, + 0x2D: { n:'PtgAreaN', f:parse_PtgAreaN }, + 0x39: { n:'PtgNameX', f:parse_PtgNameX }, + 0x3A: { n:'PtgRef3d', f:parse_PtgRef3d }, + 0x3B: { n:'PtgArea3d', f:parse_PtgArea3d }, + 0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d }, + 0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d }, + 0xFF: {} +}; +/* These are duplicated in the PtgTypes table */ +var PtgDupes = { + 0x40: 0x20, 0x60: 0x20, + 0x41: 0x21, 0x61: 0x21, + 0x42: 0x22, 0x62: 0x22, + 0x43: 0x23, 0x63: 0x23, + 0x44: 0x24, 0x64: 0x24, + 0x45: 0x25, 0x65: 0x25, + 0x46: 0x26, 0x66: 0x26, + 0x47: 0x27, 0x67: 0x27, + 0x48: 0x28, 0x68: 0x28, + 0x49: 0x29, 0x69: 0x29, + 0x4A: 0x2A, 0x6A: 0x2A, + 0x4B: 0x2B, 0x6B: 0x2B, + 0x4C: 0x2C, 0x6C: 0x2C, + 0x4D: 0x2D, 0x6D: 0x2D, + 0x59: 0x39, 0x79: 0x39, + 0x5A: 0x3A, 0x7A: 0x3A, + 0x5B: 0x3B, 0x7B: 0x3B, + 0x5C: 0x3C, 0x7C: 0x3C, + 0x5D: 0x3D, 0x7D: 0x3D +}; +(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})(); + +var Ptg18 = {}; +var Ptg19 = { + 0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi }, + 0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf }, + 0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose }, + 0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto }, + 0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum }, + 0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel }, + 0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace }, + 0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi }, + 0xFF: {} +}; + +/* 2.4.127 TODO */ +function parse_Formula(blob, length, opts) { + var cell = parse_XLSCell(blob, 6); + var val = parse_FormulaValue(blob,8); + var flags = blob.read_shift(1); + blob.read_shift(1); + var chn = blob.read_shift(4); + var cbf = ""; + if(opts.biff === 5) blob.l += length-20; + else cbf = parse_XLSCellParsedFormula(blob, length-20, opts); + return {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]}; +} + +/* 2.5.133 TODO: how to emit empty strings? */ +function parse_FormulaValue(blob) { + var b; + if(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n']; + switch(blob[blob.l]) { + case 0x00: blob.l += 8; return ["String", 's']; + case 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b']; + case 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e']; + case 0x03: blob.l += 8; return ["",'s']; + } +} + +/* 2.5.198.103 */ +function parse_RgbExtra(blob, length, rgce, opts) { + if(opts.biff < 8) return parsenoop(blob, length); + var target = blob.l + length; + var o = []; + for(var i = 0; i !== rgce.length; ++i) { + switch(rgce[i][0]) { + case 'PtgArray': /* PtgArray -> PtgExtraArray */ + rgce[i][1] = parse_PtgExtraArray(blob); + o.push(rgce[i][1]); + break; + case 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */ + rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]); + o.push(rgce[i][2]); + break; + default: break; + } + } + length = target - blob.l; + if(length !== 0) o.push(parsenoop(blob, length)); + return o; +} + +/* 2.5.198.21 */ +function parse_NameParsedFormula(blob, length, opts, cce) { + var target = blob.l + length; + var rgce = parse_Rgce(blob, cce); + var rgcb; + if(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts); + return [rgce, rgcb]; +} + +/* 2.5.198.3 TODO */ +function parse_XLSCellParsedFormula(blob, length, opts) { + var target = blob.l + length; + var rgcb, cce = blob.read_shift(2); // length of rgce + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + var rgce = parse_Rgce(blob, cce); + if(length !== cce + 2) rgcb = parse_RgbExtra(blob, length - cce - 2, rgce, opts); + return [rgce, rgcb]; +} + +/* 2.5.198.118 TODO */ +function parse_SharedParsedFormula(blob, length, opts) { + var target = blob.l + length; + var rgcb, cce = blob.read_shift(2); // length of rgce + var rgce = parse_Rgce(blob, cce); + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts); + return [rgce, rgcb]; +} + +/* 2.5.198.1 TODO */ +function parse_ArrayParsedFormula(blob, length, opts, ref) { + var target = blob.l + length; + var rgcb, cce = blob.read_shift(2); // length of rgce + if(cce == 0xFFFF) return [[],parsenoop(blob, length-2)]; + var rgce = parse_Rgce(blob, cce); + if(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts); + return [rgce, rgcb]; +} + +/* 2.5.198.104 */ +function parse_Rgce(blob, length) { + var target = blob.l + length; + var R, id, ptgs = []; + while(target != blob.l) { + length = target - blob.l; + id = blob[blob.l]; + R = PtgTypes[id]; + //console.log("ptg", id, R) + if(id === 0x18 || id === 0x19) { + id = blob[blob.l + 1]; + R = (id === 0x18 ? Ptg18 : Ptg19)[id]; + } + if(!R || !R.f) { ptgs.push(parsenoop(blob, length)); } + else { ptgs.push([R.n, R.f(blob, length)]); } + } + return ptgs; +} + +function mapper(x) { return x.map(function f2(y) { return y[1];}).join(",");} + +/* 2.2.2 + Magic TODO */ +function stringify_formula(formula, range, cell, supbooks, opts) { + if(opts !== undefined && opts.biff === 5) return "BIFF5??"; + var _range = range !== undefined ? range : {s:{c:0, r:0}}; + var stack = [], e1, e2, type, c, ixti, nameidx, r; + if(!formula[0] || !formula[0][0]) return ""; + //console.log("--",cell,formula[0]) + for(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) { + var f = formula[0][ff]; + //console.log("++",f, stack) + switch(f[0]) { + /* 2.2.2.1 Unary Operator Tokens */ + /* 2.5.198.93 */ + case 'PtgUminus': stack.push("-" + stack.pop()); break; + /* 2.5.198.95 */ + case 'PtgUplus': stack.push("+" + stack.pop()); break; + /* 2.5.198.81 */ + case 'PtgPercent': stack.push(stack.pop() + "%"); break; + + /* 2.2.2.1 Binary Value Operator Token */ + /* 2.5.198.26 */ + case 'PtgAdd': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"+"+e1); + break; + /* 2.5.198.90 */ + case 'PtgSub': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"-"+e1); + break; + /* 2.5.198.75 */ + case 'PtgMul': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"*"+e1); + break; + /* 2.5.198.45 */ + case 'PtgDiv': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"/"+e1); + break; + /* 2.5.198.82 */ + case 'PtgPower': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"^"+e1); + break; + /* 2.5.198.43 */ + case 'PtgConcat': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"&"+e1); + break; + /* 2.5.198.69 */ + case 'PtgLt': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"<"+e1); + break; + /* 2.5.198.68 */ + case 'PtgLe': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"<="+e1); + break; + /* 2.5.198.56 */ + case 'PtgEq': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"="+e1); + break; + /* 2.5.198.64 */ + case 'PtgGe': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+">="+e1); + break; + /* 2.5.198.65 */ + case 'PtgGt': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+">"+e1); + break; + /* 2.5.198.78 */ + case 'PtgNe': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+"<>"+e1); + break; + + /* 2.2.2.1 Binary Reference Operator Token */ + /* 2.5.198.67 */ + case 'PtgIsect': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+" "+e1); + break; + case 'PtgUnion': + e1 = stack.pop(); e2 = stack.pop(); + stack.push(e2+","+e1); + break; + case 'PtgRange': break; + + /* 2.2.2.3 Control Tokens "can be ignored" */ + /* 2.5.198.34 */ + case 'PtgAttrChoose': break; + /* 2.5.198.35 */ + case 'PtgAttrGoto': break; + /* 2.5.198.36 */ + case 'PtgAttrIf': break; + + + /* 2.5.198.84 */ + case 'PtgRef': + type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), _range); + stack.push(encode_cell(c)); + break; + /* 2.5.198.88 */ + case 'PtgRefN': + type = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), cell); + stack.push(encode_cell(c)); + break; + case 'PtgRef3d': // TODO: lots of stuff + type = f[1][0]; ixti = f[1][1]; c = shift_cell_xls(f[1][2], _range); + stack.push(supbooks[1][ixti+1]+"!"+encode_cell(c)); + break; + + /* Function Call */ + /* 2.5.198.62 */ + case 'PtgFunc': + /* 2.5.198.63 */ + case 'PtgFuncVar': + /* f[1] = [argc, func] */ + var argc = f[1][0], func = f[1][1]; + if(!argc) argc = 0; + var args = stack.slice(-argc); + stack.length -= argc; + if(func === 'User') func = args.shift(); + stack.push(func + "(" + args.join(",") + ")"); + break; + + /* 2.5.198.42 */ + case 'PtgBool': stack.push(f[1] ? "TRUE" : "FALSE"); break; + /* 2.5.198.66 */ + case 'PtgInt': stack.push(f[1]); break; + /* 2.5.198.79 TODO: precision? */ + case 'PtgNum': stack.push(String(f[1])); break; + /* 2.5.198.89 */ + case 'PtgStr': stack.push('"' + f[1] + '"'); break; + /* 2.5.198.57 */ + case 'PtgErr': stack.push(f[1]); break; + /* 2.5.198.27 TODO: fixed points */ + case 'PtgArea': + type = f[1][0]; r = shift_range_xls(f[1][1], _range); + stack.push(encode_range(r)); + break; + /* 2.5.198.28 */ + case 'PtgArea3d': // TODO: lots of stuff + type = f[1][0]; ixti = f[1][1]; r = f[1][2]; + stack.push(supbooks[1][ixti+1]+"!"+encode_range(r)); + break; + /* 2.5.198.41 */ + case 'PtgAttrSum': + stack.push("SUM(" + stack.pop() + ")"); + break; + + /* Expression Prefixes */ + /* 2.5.198.37 */ + case 'PtgAttrSemi': break; + + /* 2.5.97.60 TODO: do something different for revisions */ + case 'PtgName': + /* f[1] = type, 0, nameindex */ + nameidx = f[1][2]; + var lbl = supbooks[0][nameidx]; + var name = lbl.Name; + if(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name]; + stack.push(name); + break; + + /* 2.5.97.61 TODO: do something different for revisions */ + case 'PtgNameX': + /* f[1] = type, ixti, nameindex */ + var bookidx = f[1][1]; nameidx = f[1][2]; var externbook; + /* TODO: Properly handle missing values */ + if(supbooks[bookidx+1]) externbook = supbooks[bookidx+1][nameidx]; + else if(supbooks[bookidx-1]) externbook = supbooks[bookidx-1][nameidx]; + if(!externbook) externbook = {body: "??NAMEX??"}; + stack.push(externbook.body); + break; + + /* 2.2.2.4 Display Tokens */ + /* 2.5.198.80 */ + case 'PtgParen': stack.push('(' + stack.pop() + ')'); break; + + /* 2.5.198.86 */ + case 'PtgRefErr': stack.push('#REF!'); break; + + /* */ + /* 2.5.198.58 TODO */ + case 'PtgExp': + c = {c:f[1][1],r:f[1][0]}; + var q = {c: cell.c, r:cell.r}; + if(supbooks.sharedf[encode_cell(c)]) { + var parsedf = (supbooks.sharedf[encode_cell(c)]); + stack.push(stringify_formula(parsedf, _range, q, supbooks, opts)); + } + else { + var fnd = false; + for(e1=0;e1!=supbooks.arrayf.length; ++e1) { + /* TODO: should be something like range_has */ + e2 = supbooks.arrayf[e1]; + if(c.c < e2[0].s.c || c.c > e2[0].e.c) continue; + if(c.r < e2[0].s.r || c.r > e2[0].e.r) continue; + stack.push(stringify_formula(e2[1], _range, q, supbooks, opts)); + } + if(!fnd) stack.push(f[1]); + } + break; + + /* 2.5.198.32 TODO */ + case 'PtgArray': + stack.push("{" + f[1].map(mapper).join(";") + "}"); + break; + + /* 2.2.2.5 Mem Tokens */ + /* 2.5.198.70 TODO: confirm this is a non-display */ + case 'PtgMemArea': + //stack.push("(" + f[2].map(encode_range).join(",") + ")"); + break; + + /* 2.5.198.38 TODO */ + case 'PtgAttrSpace': break; + + /* 2.5.198.92 TODO */ + case 'PtgTbl': break; + + /* 2.5.198.71 */ + case 'PtgMemErr': break; + + /* 2.5.198.74 */ + case 'PtgMissArg': + stack.push(""); + break; + + /* 2.5.198.29 TODO */ + case 'PtgAreaErr': break; + + /* 2.5.198.31 TODO */ + case 'PtgAreaN': stack.push(""); break; + + /* 2.5.198.87 TODO */ + case 'PtgRefErr3d': break; + + /* 2.5.198.72 TODO */ + case 'PtgMemFunc': break; + + default: throw 'Unrecognized Formula Token: ' + f; + } + //console.log("::",f, stack) + } + //console.log("--",stack); + return stack[0]; +} + diff --git a/bits/63_fbin.js b/bits/63_fbin.js index 6d6286d..a3244a7 100644 --- a/bits/63_fbin.js +++ b/bits/63_fbin.js @@ -1,5 +1,5 @@ /* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */ -function parse_CellParsedFormula(data, length) { +function parse_XLSBCellParsedFormula(data, length) { var cce = data.read_shift(4); return parsenoop(data, length-4); } diff --git a/bits/64_ftab.js b/bits/64_ftab.js new file mode 100644 index 0000000..50e344b --- /dev/null +++ b/bits/64_ftab.js @@ -0,0 +1,1090 @@ +/* [MS-XLS] 2.5.198.44 */ +var PtgDataType = { + 0x1: "REFERENCE", // reference to range + 0x2: "VALUE", // single value + 0x3: "ARRAY" // array of values +}; + +/* [MS-XLS] 2.5.198.4 */ +var Cetab = { + 0x0000: 'BEEP', + 0x0001: 'OPEN', + 0x0002: 'OPEN.LINKS', + 0x0003: 'CLOSE.ALL', + 0x0004: 'SAVE', + 0x0005: 'SAVE.AS', + 0x0006: 'FILE.DELETE', + 0x0007: 'PAGE.SETUP', + 0x0008: 'PRINT', + 0x0009: 'PRINTER.SETUP', + 0x000A: 'QUIT', + 0x000B: 'NEW.WINDOW', + 0x000C: 'ARRANGE.ALL', + 0x000D: 'WINDOW.SIZE', + 0x000E: 'WINDOW.MOVE', + 0x000F: 'FULL', + 0x0010: 'CLOSE', + 0x0011: 'RUN', + 0x0016: 'SET.PRINT.AREA', + 0x0017: 'SET.PRINT.TITLES', + 0x0018: 'SET.PAGE.BREAK', + 0x0019: 'REMOVE.PAGE.BREAK', + 0x001A: 'FONT', + 0x001B: 'DISPLAY', + 0x001C: 'PROTECT.DOCUMENT', + 0x001D: 'PRECISION', + 0x001E: 'A1.R1C1', + 0x001F: 'CALCULATE.NOW', + 0x0020: 'CALCULATION', + 0x0022: 'DATA.FIND', + 0x0023: 'EXTRACT', + 0x0024: 'DATA.DELETE', + 0x0025: 'SET.DATABASE', + 0x0026: 'SET.CRITERIA', + 0x0027: 'SORT', + 0x0028: 'DATA.SERIES', + 0x0029: 'TABLE', + 0x002A: 'FORMAT.NUMBER', + 0x002B: 'ALIGNMENT', + 0x002C: 'STYLE', + 0x002D: 'BORDER', + 0x002E: 'CELL.PROTECTION', + 0x002F: 'COLUMN.WIDTH', + 0x0030: 'UNDO', + 0x0031: 'CUT', + 0x0032: 'COPY', + 0x0033: 'PASTE', + 0x0034: 'CLEAR', + 0x0035: 'PASTE.SPECIAL', + 0x0036: 'EDIT.DELETE', + 0x0037: 'INSERT', + 0x0038: 'FILL.RIGHT', + 0x0039: 'FILL.DOWN', + 0x003D: 'DEFINE.NAME', + 0x003E: 'CREATE.NAMES', + 0x003F: 'FORMULA.GOTO', + 0x0040: 'FORMULA.FIND', + 0x0041: 'SELECT.LAST.CELL', + 0x0042: 'SHOW.ACTIVE.CELL', + 0x0043: 'GALLERY.AREA', + 0x0044: 'GALLERY.BAR', + 0x0045: 'GALLERY.COLUMN', + 0x0046: 'GALLERY.LINE', + 0x0047: 'GALLERY.PIE', + 0x0048: 'GALLERY.SCATTER', + 0x0049: 'COMBINATION', + 0x004A: 'PREFERRED', + 0x004B: 'ADD.OVERLAY', + 0x004C: 'GRIDLINES', + 0x004D: 'SET.PREFERRED', + 0x004E: 'AXES', + 0x004F: 'LEGEND', + 0x0050: 'ATTACH.TEXT', + 0x0051: 'ADD.ARROW', + 0x0052: 'SELECT.CHART', + 0x0053: 'SELECT.PLOT.AREA', + 0x0054: 'PATTERNS', + 0x0055: 'MAIN.CHART', + 0x0056: 'OVERLAY', + 0x0057: 'SCALE', + 0x0058: 'FORMAT.LEGEND', + 0x0059: 'FORMAT.TEXT', + 0x005A: 'EDIT.REPEAT', + 0x005B: 'PARSE', + 0x005C: 'JUSTIFY', + 0x005D: 'HIDE', + 0x005E: 'UNHIDE', + 0x005F: 'WORKSPACE', + 0x0060: 'FORMULA', + 0x0061: 'FORMULA.FILL', + 0x0062: 'FORMULA.ARRAY', + 0x0063: 'DATA.FIND.NEXT', + 0x0064: 'DATA.FIND.PREV', + 0x0065: 'FORMULA.FIND.NEXT', + 0x0066: 'FORMULA.FIND.PREV', + 0x0067: 'ACTIVATE', + 0x0068: 'ACTIVATE.NEXT', + 0x0069: 'ACTIVATE.PREV', + 0x006A: 'UNLOCKED.NEXT', + 0x006B: 'UNLOCKED.PREV', + 0x006C: 'COPY.PICTURE', + 0x006D: 'SELECT', + 0x006E: 'DELETE.NAME', + 0x006F: 'DELETE.FORMAT', + 0x0070: 'VLINE', + 0x0071: 'HLINE', + 0x0072: 'VPAGE', + 0x0073: 'HPAGE', + 0x0074: 'VSCROLL', + 0x0075: 'HSCROLL', + 0x0076: 'ALERT', + 0x0077: 'NEW', + 0x0078: 'CANCEL.COPY', + 0x0079: 'SHOW.CLIPBOARD', + 0x007A: 'MESSAGE', + 0x007C: 'PASTE.LINK', + 0x007D: 'APP.ACTIVATE', + 0x007E: 'DELETE.ARROW', + 0x007F: 'ROW.HEIGHT', + 0x0080: 'FORMAT.MOVE', + 0x0081: 'FORMAT.SIZE', + 0x0082: 'FORMULA.REPLACE', + 0x0083: 'SEND.KEYS', + 0x0084: 'SELECT.SPECIAL', + 0x0085: 'APPLY.NAMES', + 0x0086: 'REPLACE.FONT', + 0x0087: 'FREEZE.PANES', + 0x0088: 'SHOW.INFO', + 0x0089: 'SPLIT', + 0x008A: 'ON.WINDOW', + 0x008B: 'ON.DATA', + 0x008C: 'DISABLE.INPUT', + 0x008E: 'OUTLINE', + 0x008F: 'LIST.NAMES', + 0x0090: 'FILE.CLOSE', + 0x0091: 'SAVE.WORKBOOK', + 0x0092: 'DATA.FORM', + 0x0093: 'COPY.CHART', + 0x0094: 'ON.TIME', + 0x0095: 'WAIT', + 0x0096: 'FORMAT.FONT', + 0x0097: 'FILL.UP', + 0x0098: 'FILL.LEFT', + 0x0099: 'DELETE.OVERLAY', + 0x009B: 'SHORT.MENUS', + 0x009F: 'SET.UPDATE.STATUS', + 0x00A1: 'COLOR.PALETTE', + 0x00A2: 'DELETE.STYLE', + 0x00A3: 'WINDOW.RESTORE', + 0x00A4: 'WINDOW.MAXIMIZE', + 0x00A6: 'CHANGE.LINK', + 0x00A7: 'CALCULATE.DOCUMENT', + 0x00A8: 'ON.KEY', + 0x00A9: 'APP.RESTORE', + 0x00AA: 'APP.MOVE', + 0x00AB: 'APP.SIZE', + 0x00AC: 'APP.MINIMIZE', + 0x00AD: 'APP.MAXIMIZE', + 0x00AE: 'BRING.TO.FRONT', + 0x00AF: 'SEND.TO.BACK', + 0x00B9: 'MAIN.CHART.TYPE', + 0x00BA: 'OVERLAY.CHART.TYPE', + 0x00BB: 'SELECT.END', + 0x00BC: 'OPEN.MAIL', + 0x00BD: 'SEND.MAIL', + 0x00BE: 'STANDARD.FONT', + 0x00BF: 'CONSOLIDATE', + 0x00C0: 'SORT.SPECIAL', + 0x00C1: 'GALLERY.3D.AREA', + 0x00C2: 'GALLERY.3D.COLUMN', + 0x00C3: 'GALLERY.3D.LINE', + 0x00C4: 'GALLERY.3D.PIE', + 0x00C5: 'VIEW.3D', + 0x00C6: 'GOAL.SEEK', + 0x00C7: 'WORKGROUP', + 0x00C8: 'FILL.GROUP', + 0x00C9: 'UPDATE.LINK', + 0x00CA: 'PROMOTE', + 0x00CB: 'DEMOTE', + 0x00CC: 'SHOW.DETAIL', + 0x00CE: 'UNGROUP', + 0x00CF: 'OBJECT.PROPERTIES', + 0x00D0: 'SAVE.NEW.OBJECT', + 0x00D1: 'SHARE', + 0x00D2: 'SHARE.NAME', + 0x00D3: 'DUPLICATE', + 0x00D4: 'APPLY.STYLE', + 0x00D5: 'ASSIGN.TO.OBJECT', + 0x00D6: 'OBJECT.PROTECTION', + 0x00D7: 'HIDE.OBJECT', + 0x00D8: 'SET.EXTRACT', + 0x00D9: 'CREATE.PUBLISHER', + 0x00DA: 'SUBSCRIBE.TO', + 0x00DB: 'ATTRIBUTES', + 0x00DC: 'SHOW.TOOLBAR', + 0x00DE: 'PRINT.PREVIEW', + 0x00DF: 'EDIT.COLOR', + 0x00E0: 'SHOW.LEVELS', + 0x00E1: 'FORMAT.MAIN', + 0x00E2: 'FORMAT.OVERLAY', + 0x00E3: 'ON.RECALC', + 0x00E4: 'EDIT.SERIES', + 0x00E5: 'DEFINE.STYLE', + 0x00F0: 'LINE.PRINT', + 0x00F3: 'ENTER.DATA', + 0x00F9: 'GALLERY.RADAR', + 0x00FA: 'MERGE.STYLES', + 0x00FB: 'EDITION.OPTIONS', + 0x00FC: 'PASTE.PICTURE', + 0x00FD: 'PASTE.PICTURE.LINK', + 0x00FE: 'SPELLING', + 0x0100: 'ZOOM', + 0x0103: 'INSERT.OBJECT', + 0x0104: 'WINDOW.MINIMIZE', + 0x0109: 'SOUND.NOTE', + 0x010A: 'SOUND.PLAY', + 0x010B: 'FORMAT.SHAPE', + 0x010C: 'EXTEND.POLYGON', + 0x010D: 'FORMAT.AUTO', + 0x0110: 'GALLERY.3D.BAR', + 0x0111: 'GALLERY.3D.SURFACE', + 0x0112: 'FILL.AUTO', + 0x0114: 'CUSTOMIZE.TOOLBAR', + 0x0115: 'ADD.TOOL', + 0x0116: 'EDIT.OBJECT', + 0x0117: 'ON.DOUBLECLICK', + 0x0118: 'ON.ENTRY', + 0x0119: 'WORKBOOK.ADD', + 0x011A: 'WORKBOOK.MOVE', + 0x011B: 'WORKBOOK.COPY', + 0x011C: 'WORKBOOK.OPTIONS', + 0x011D: 'SAVE.WORKSPACE', + 0x0120: 'CHART.WIZARD', + 0x0121: 'DELETE.TOOL', + 0x0122: 'MOVE.TOOL', + 0x0123: 'WORKBOOK.SELECT', + 0x0124: 'WORKBOOK.ACTIVATE', + 0x0125: 'ASSIGN.TO.TOOL', + 0x0127: 'COPY.TOOL', + 0x0128: 'RESET.TOOL', + 0x0129: 'CONSTRAIN.NUMERIC', + 0x012A: 'PASTE.TOOL', + 0x012E: 'WORKBOOK.NEW', + 0x0131: 'SCENARIO.CELLS', + 0x0132: 'SCENARIO.DELETE', + 0x0133: 'SCENARIO.ADD', + 0x0134: 'SCENARIO.EDIT', + 0x0135: 'SCENARIO.SHOW', + 0x0136: 'SCENARIO.SHOW.NEXT', + 0x0137: 'SCENARIO.SUMMARY', + 0x0138: 'PIVOT.TABLE.WIZARD', + 0x0139: 'PIVOT.FIELD.PROPERTIES', + 0x013A: 'PIVOT.FIELD', + 0x013B: 'PIVOT.ITEM', + 0x013C: 'PIVOT.ADD.FIELDS', + 0x013E: 'OPTIONS.CALCULATION', + 0x013F: 'OPTIONS.EDIT', + 0x0140: 'OPTIONS.VIEW', + 0x0141: 'ADDIN.MANAGER', + 0x0142: 'MENU.EDITOR', + 0x0143: 'ATTACH.TOOLBARS', + 0x0144: 'VBAActivate', + 0x0145: 'OPTIONS.CHART', + 0x0148: 'VBA.INSERT.FILE', + 0x014A: 'VBA.PROCEDURE.DEFINITION', + 0x0150: 'ROUTING.SLIP', + 0x0152: 'ROUTE.DOCUMENT', + 0x0153: 'MAIL.LOGON', + 0x0156: 'INSERT.PICTURE', + 0x0157: 'EDIT.TOOL', + 0x0158: 'GALLERY.DOUGHNUT', + 0x015E: 'CHART.TREND', + 0x0160: 'PIVOT.ITEM.PROPERTIES', + 0x0162: 'WORKBOOK.INSERT', + 0x0163: 'OPTIONS.TRANSITION', + 0x0164: 'OPTIONS.GENERAL', + 0x0172: 'FILTER.ADVANCED', + 0x0175: 'MAIL.ADD.MAILER', + 0x0176: 'MAIL.DELETE.MAILER', + 0x0177: 'MAIL.REPLY', + 0x0178: 'MAIL.REPLY.ALL', + 0x0179: 'MAIL.FORWARD', + 0x017A: 'MAIL.NEXT.LETTER', + 0x017B: 'DATA.LABEL', + 0x017C: 'INSERT.TITLE', + 0x017D: 'FONT.PROPERTIES', + 0x017E: 'MACRO.OPTIONS', + 0x017F: 'WORKBOOK.HIDE', + 0x0180: 'WORKBOOK.UNHIDE', + 0x0181: 'WORKBOOK.DELETE', + 0x0182: 'WORKBOOK.NAME', + 0x0184: 'GALLERY.CUSTOM', + 0x0186: 'ADD.CHART.AUTOFORMAT', + 0x0187: 'DELETE.CHART.AUTOFORMAT', + 0x0188: 'CHART.ADD.DATA', + 0x0189: 'AUTO.OUTLINE', + 0x018A: 'TAB.ORDER', + 0x018B: 'SHOW.DIALOG', + 0x018C: 'SELECT.ALL', + 0x018D: 'UNGROUP.SHEETS', + 0x018E: 'SUBTOTAL.CREATE', + 0x018F: 'SUBTOTAL.REMOVE', + 0x0190: 'RENAME.OBJECT', + 0x019C: 'WORKBOOK.SCROLL', + 0x019D: 'WORKBOOK.NEXT', + 0x019E: 'WORKBOOK.PREV', + 0x019F: 'WORKBOOK.TAB.SPLIT', + 0x01A0: 'FULL.SCREEN', + 0x01A1: 'WORKBOOK.PROTECT', + 0x01A4: 'SCROLLBAR.PROPERTIES', + 0x01A5: 'PIVOT.SHOW.PAGES', + 0x01A6: 'TEXT.TO.COLUMNS', + 0x01A7: 'FORMAT.CHARTTYPE', + 0x01A8: 'LINK.FORMAT', + 0x01A9: 'TRACER.DISPLAY', + 0x01AE: 'TRACER.NAVIGATE', + 0x01AF: 'TRACER.CLEAR', + 0x01B0: 'TRACER.ERROR', + 0x01B1: 'PIVOT.FIELD.GROUP', + 0x01B2: 'PIVOT.FIELD.UNGROUP', + 0x01B3: 'CHECKBOX.PROPERTIES', + 0x01B4: 'LABEL.PROPERTIES', + 0x01B5: 'LISTBOX.PROPERTIES', + 0x01B6: 'EDITBOX.PROPERTIES', + 0x01B7: 'PIVOT.REFRESH', + 0x01B8: 'LINK.COMBO', + 0x01B9: 'OPEN.TEXT', + 0x01BA: 'HIDE.DIALOG', + 0x01BB: 'SET.DIALOG.FOCUS', + 0x01BC: 'ENABLE.OBJECT', + 0x01BD: 'PUSHBUTTON.PROPERTIES', + 0x01BE: 'SET.DIALOG.DEFAULT', + 0x01BF: 'FILTER', + 0x01C0: 'FILTER.SHOW.ALL', + 0x01C1: 'CLEAR.OUTLINE', + 0x01C2: 'FUNCTION.WIZARD', + 0x01C3: 'ADD.LIST.ITEM', + 0x01C4: 'SET.LIST.ITEM', + 0x01C5: 'REMOVE.LIST.ITEM', + 0x01C6: 'SELECT.LIST.ITEM', + 0x01C7: 'SET.CONTROL.VALUE', + 0x01C8: 'SAVE.COPY.AS', + 0x01CA: 'OPTIONS.LISTS.ADD', + 0x01CB: 'OPTIONS.LISTS.DELETE', + 0x01CC: 'SERIES.AXES', + 0x01CD: 'SERIES.X', + 0x01CE: 'SERIES.Y', + 0x01CF: 'ERRORBAR.X', + 0x01D0: 'ERRORBAR.Y', + 0x01D1: 'FORMAT.CHART', + 0x01D2: 'SERIES.ORDER', + 0x01D3: 'MAIL.LOGOFF', + 0x01D4: 'CLEAR.ROUTING.SLIP', + 0x01D5: 'APP.ACTIVATE.MICROSOFT', + 0x01D6: 'MAIL.EDIT.MAILER', + 0x01D7: 'ON.SHEET', + 0x01D8: 'STANDARD.WIDTH', + 0x01D9: 'SCENARIO.MERGE', + 0x01DA: 'SUMMARY.INFO', + 0x01DB: 'FIND.FILE', + 0x01DC: 'ACTIVE.CELL.FONT', + 0x01DD: 'ENABLE.TIPWIZARD', + 0x01DE: 'VBA.MAKE.ADDIN', + 0x01E0: 'INSERTDATATABLE', + 0x01E1: 'WORKGROUP.OPTIONS', + 0x01E2: 'MAIL.SEND.MAILER', + 0x01E5: 'AUTOCORRECT', + 0x01E9: 'POST.DOCUMENT', + 0x01EB: 'PICKLIST', + 0x01ED: 'VIEW.SHOW', + 0x01EE: 'VIEW.DEFINE', + 0x01EF: 'VIEW.DELETE', + 0x01FD: 'SHEET.BACKGROUND', + 0x01FE: 'INSERT.MAP.OBJECT', + 0x01FF: 'OPTIONS.MENONO', + 0x0205: 'MSOCHECKS', + 0x0206: 'NORMAL', + 0x0207: 'LAYOUT', + 0x0208: 'RM.PRINT.AREA', + 0x0209: 'CLEAR.PRINT.AREA', + 0x020A: 'ADD.PRINT.AREA', + 0x020B: 'MOVE.BRK', + 0x0221: 'HIDECURR.NOTE', + 0x0222: 'HIDEALL.NOTES', + 0x0223: 'DELETE.NOTE', + 0x0224: 'TRAVERSE.NOTES', + 0x0225: 'ACTIVATE.NOTES', + 0x026C: 'PROTECT.REVISIONS', + 0x026D: 'UNPROTECT.REVISIONS', + 0x0287: 'OPTIONS.ME', + 0x028D: 'WEB.PUBLISH', + 0x029B: 'NEWWEBQUERY', + 0x02A1: 'PIVOT.TABLE.CHART', + 0x02F1: 'OPTIONS.SAVE', + 0x02F3: 'OPTIONS.SPELL', + 0x0328: 'HIDEALL.INKANNOTS' +}; + +/* [MS-XLS] 2.5.198.17 */ +var Ftab = { + 0x0000: 'COUNT', + 0x0001: 'IF', + 0x0002: 'ISNA', + 0x0003: 'ISERROR', + 0x0004: 'SUM', + 0x0005: 'AVERAGE', + 0x0006: 'MIN', + 0x0007: 'MAX', + 0x0008: 'ROW', + 0x0009: 'COLUMN', + 0x000A: 'NA', + 0x000B: 'NPV', + 0x000C: 'STDEV', + 0x000D: 'DOLLAR', + 0x000E: 'FIXED', + 0x000F: 'SIN', + 0x0010: 'COS', + 0x0011: 'TAN', + 0x0012: 'ATAN', + 0x0013: 'PI', + 0x0014: 'SQRT', + 0x0015: 'EXP', + 0x0016: 'LN', + 0x0017: 'LOG10', + 0x0018: 'ABS', + 0x0019: 'INT', + 0x001A: 'SIGN', + 0x001B: 'ROUND', + 0x001C: 'LOOKUP', + 0x001D: 'INDEX', + 0x001E: 'REPT', + 0x001F: 'MID', + 0x0020: 'LEN', + 0x0021: 'VALUE', + 0x0022: 'TRUE', + 0x0023: 'FALSE', + 0x0024: 'AND', + 0x0025: 'OR', + 0x0026: 'NOT', + 0x0027: 'MOD', + 0x0028: 'DCOUNT', + 0x0029: 'DSUM', + 0x002A: 'DAVERAGE', + 0x002B: 'DMIN', + 0x002C: 'DMAX', + 0x002D: 'DSTDEV', + 0x002E: 'VAR', + 0x002F: 'DVAR', + 0x0030: 'TEXT', + 0x0031: 'LINEST', + 0x0032: 'TREND', + 0x0033: 'LOGEST', + 0x0034: 'GROWTH', + 0x0035: 'GOTO', + 0x0036: 'HALT', + 0x0037: 'RETURN', + 0x0038: 'PV', + 0x0039: 'FV', + 0x003A: 'NPER', + 0x003B: 'PMT', + 0x003C: 'RATE', + 0x003D: 'MIRR', + 0x003E: 'IRR', + 0x003F: 'RAND', + 0x0040: 'MATCH', + 0x0041: 'DATE', + 0x0042: 'TIME', + 0x0043: 'DAY', + 0x0044: 'MONTH', + 0x0045: 'YEAR', + 0x0046: 'WEEKDAY', + 0x0047: 'HOUR', + 0x0048: 'MINUTE', + 0x0049: 'SECOND', + 0x004A: 'NOW', + 0x004B: 'AREAS', + 0x004C: 'ROWS', + 0x004D: 'COLUMNS', + 0x004E: 'OFFSET', + 0x004F: 'ABSREF', + 0x0050: 'RELREF', + 0x0051: 'ARGUMENT', + 0x0052: 'SEARCH', + 0x0053: 'TRANSPOSE', + 0x0054: 'ERROR', + 0x0055: 'STEP', + 0x0056: 'TYPE', + 0x0057: 'ECHO', + 0x0058: 'SET.NAME', + 0x0059: 'CALLER', + 0x005A: 'DEREF', + 0x005B: 'WINDOWS', + 0x005C: 'SERIES', + 0x005D: 'DOCUMENTS', + 0x005E: 'ACTIVE.CELL', + 0x005F: 'SELECTION', + 0x0060: 'RESULT', + 0x0061: 'ATAN2', + 0x0062: 'ASIN', + 0x0063: 'ACOS', + 0x0064: 'CHOOSE', + 0x0065: 'HLOOKUP', + 0x0066: 'VLOOKUP', + 0x0067: 'LINKS', + 0x0068: 'INPUT', + 0x0069: 'ISREF', + 0x006A: 'GET.FORMULA', + 0x006B: 'GET.NAME', + 0x006C: 'SET.VALUE', + 0x006D: 'LOG', + 0x006E: 'EXEC', + 0x006F: 'CHAR', + 0x0070: 'LOWER', + 0x0071: 'UPPER', + 0x0072: 'PROPER', + 0x0073: 'LEFT', + 0x0074: 'RIGHT', + 0x0075: 'EXACT', + 0x0076: 'TRIM', + 0x0077: 'REPLACE', + 0x0078: 'SUBSTITUTE', + 0x0079: 'CODE', + 0x007A: 'NAMES', + 0x007B: 'DIRECTORY', + 0x007C: 'FIND', + 0x007D: 'CELL', + 0x007E: 'ISERR', + 0x007F: 'ISTEXT', + 0x0080: 'ISNUMBER', + 0x0081: 'ISBLANK', + 0x0082: 'T', + 0x0083: 'N', + 0x0084: 'FOPEN', + 0x0085: 'FCLOSE', + 0x0086: 'FSIZE', + 0x0087: 'FREADLN', + 0x0088: 'FREAD', + 0x0089: 'FWRITELN', + 0x008A: 'FWRITE', + 0x008B: 'FPOS', + 0x008C: 'DATEVALUE', + 0x008D: 'TIMEVALUE', + 0x008E: 'SLN', + 0x008F: 'SYD', + 0x0090: 'DDB', + 0x0091: 'GET.DEF', + 0x0092: 'REFTEXT', + 0x0093: 'TEXTREF', + 0x0094: 'INDIRECT', + 0x0095: 'REGISTER', + 0x0096: 'CALL', + 0x0097: 'ADD.BAR', + 0x0098: 'ADD.MENU', + 0x0099: 'ADD.COMMAND', + 0x009A: 'ENABLE.COMMAND', + 0x009B: 'CHECK.COMMAND', + 0x009C: 'RENAME.COMMAND', + 0x009D: 'SHOW.BAR', + 0x009E: 'DELETE.MENU', + 0x009F: 'DELETE.COMMAND', + 0x00A0: 'GET.CHART.ITEM', + 0x00A1: 'DIALOG.BOX', + 0x00A2: 'CLEAN', + 0x00A3: 'MDETERM', + 0x00A4: 'MINVERSE', + 0x00A5: 'MMULT', + 0x00A6: 'FILES', + 0x00A7: 'IPMT', + 0x00A8: 'PPMT', + 0x00A9: 'COUNTA', + 0x00AA: 'CANCEL.KEY', + 0x00AB: 'FOR', + 0x00AC: 'WHILE', + 0x00AD: 'BREAK', + 0x00AE: 'NEXT', + 0x00AF: 'INITIATE', + 0x00B0: 'REQUEST', + 0x00B1: 'POKE', + 0x00B2: 'EXECUTE', + 0x00B3: 'TERMINATE', + 0x00B4: 'RESTART', + 0x00B5: 'HELP', + 0x00B6: 'GET.BAR', + 0x00B7: 'PRODUCT', + 0x00B8: 'FACT', + 0x00B9: 'GET.CELL', + 0x00BA: 'GET.WORKSPACE', + 0x00BB: 'GET.WINDOW', + 0x00BC: 'GET.DOCUMENT', + 0x00BD: 'DPRODUCT', + 0x00BE: 'ISNONTEXT', + 0x00BF: 'GET.NOTE', + 0x00C0: 'NOTE', + 0x00C1: 'STDEVP', + 0x00C2: 'VARP', + 0x00C3: 'DSTDEVP', + 0x00C4: 'DVARP', + 0x00C5: 'TRUNC', + 0x00C6: 'ISLOGICAL', + 0x00C7: 'DCOUNTA', + 0x00C8: 'DELETE.BAR', + 0x00C9: 'UNREGISTER', + 0x00CC: 'USDOLLAR', + 0x00CD: 'FINDB', + 0x00CE: 'SEARCHB', + 0x00CF: 'REPLACEB', + 0x00D0: 'LEFTB', + 0x00D1: 'RIGHTB', + 0x00D2: 'MIDB', + 0x00D3: 'LENB', + 0x00D4: 'ROUNDUP', + 0x00D5: 'ROUNDDOWN', + 0x00D6: 'ASC', + 0x00D7: 'DBCS', + 0x00D8: 'RANK', + 0x00DB: 'ADDRESS', + 0x00DC: 'DAYS360', + 0x00DD: 'TODAY', + 0x00DE: 'VDB', + 0x00DF: 'ELSE', + 0x00E0: 'ELSE.IF', + 0x00E1: 'END.IF', + 0x00E2: 'FOR.CELL', + 0x00E3: 'MEDIAN', + 0x00E4: 'SUMPRODUCT', + 0x00E5: 'SINH', + 0x00E6: 'COSH', + 0x00E7: 'TANH', + 0x00E8: 'ASINH', + 0x00E9: 'ACOSH', + 0x00EA: 'ATANH', + 0x00EB: 'DGET', + 0x00EC: 'CREATE.OBJECT', + 0x00ED: 'VOLATILE', + 0x00EE: 'LAST.ERROR', + 0x00EF: 'CUSTOM.UNDO', + 0x00F0: 'CUSTOM.REPEAT', + 0x00F1: 'FORMULA.CONVERT', + 0x00F2: 'GET.LINK.INFO', + 0x00F3: 'TEXT.BOX', + 0x00F4: 'INFO', + 0x00F5: 'GROUP', + 0x00F6: 'GET.OBJECT', + 0x00F7: 'DB', + 0x00F8: 'PAUSE', + 0x00FB: 'RESUME', + 0x00FC: 'FREQUENCY', + 0x00FD: 'ADD.TOOLBAR', + 0x00FE: 'DELETE.TOOLBAR', + 0x00FF: 'User', + 0x0100: 'RESET.TOOLBAR', + 0x0101: 'EVALUATE', + 0x0102: 'GET.TOOLBAR', + 0x0103: 'GET.TOOL', + 0x0104: 'SPELLING.CHECK', + 0x0105: 'ERROR.TYPE', + 0x0106: 'APP.TITLE', + 0x0107: 'WINDOW.TITLE', + 0x0108: 'SAVE.TOOLBAR', + 0x0109: 'ENABLE.TOOL', + 0x010A: 'PRESS.TOOL', + 0x010B: 'REGISTER.ID', + 0x010C: 'GET.WORKBOOK', + 0x010D: 'AVEDEV', + 0x010E: 'BETADIST', + 0x010F: 'GAMMALN', + 0x0110: 'BETAINV', + 0x0111: 'BINOMDIST', + 0x0112: 'CHIDIST', + 0x0113: 'CHIINV', + 0x0114: 'COMBIN', + 0x0115: 'CONFIDENCE', + 0x0116: 'CRITBINOM', + 0x0117: 'EVEN', + 0x0118: 'EXPONDIST', + 0x0119: 'FDIST', + 0x011A: 'FINV', + 0x011B: 'FISHER', + 0x011C: 'FISHERINV', + 0x011D: 'FLOOR', + 0x011E: 'GAMMADIST', + 0x011F: 'GAMMAINV', + 0x0120: 'CEILING', + 0x0121: 'HYPGEOMDIST', + 0x0122: 'LOGNORMDIST', + 0x0123: 'LOGINV', + 0x0124: 'NEGBINOMDIST', + 0x0125: 'NORMDIST', + 0x0126: 'NORMSDIST', + 0x0127: 'NORMINV', + 0x0128: 'NORMSINV', + 0x0129: 'STANDARDIZE', + 0x012A: 'ODD', + 0x012B: 'PERMUT', + 0x012C: 'POISSON', + 0x012D: 'TDIST', + 0x012E: 'WEIBULL', + 0x012F: 'SUMXMY2', + 0x0130: 'SUMX2MY2', + 0x0131: 'SUMX2PY2', + 0x0132: 'CHITEST', + 0x0133: 'CORREL', + 0x0134: 'COVAR', + 0x0135: 'FORECAST', + 0x0136: 'FTEST', + 0x0137: 'INTERCEPT', + 0x0138: 'PEARSON', + 0x0139: 'RSQ', + 0x013A: 'STEYX', + 0x013B: 'SLOPE', + 0x013C: 'TTEST', + 0x013D: 'PROB', + 0x013E: 'DEVSQ', + 0x013F: 'GEOMEAN', + 0x0140: 'HARMEAN', + 0x0141: 'SUMSQ', + 0x0142: 'KURT', + 0x0143: 'SKEW', + 0x0144: 'ZTEST', + 0x0145: 'LARGE', + 0x0146: 'SMALL', + 0x0147: 'QUARTILE', + 0x0148: 'PERCENTILE', + 0x0149: 'PERCENTRANK', + 0x014A: 'MODE', + 0x014B: 'TRIMMEAN', + 0x014C: 'TINV', + 0x014E: 'MOVIE.COMMAND', + 0x014F: 'GET.MOVIE', + 0x0150: 'CONCATENATE', + 0x0151: 'POWER', + 0x0152: 'PIVOT.ADD.DATA', + 0x0153: 'GET.PIVOT.TABLE', + 0x0154: 'GET.PIVOT.FIELD', + 0x0155: 'GET.PIVOT.ITEM', + 0x0156: 'RADIANS', + 0x0157: 'DEGREES', + 0x0158: 'SUBTOTAL', + 0x0159: 'SUMIF', + 0x015A: 'COUNTIF', + 0x015B: 'COUNTBLANK', + 0x015C: 'SCENARIO.GET', + 0x015D: 'OPTIONS.LISTS.GET', + 0x015E: 'ISPMT', + 0x015F: 'DATEDIF', + 0x0160: 'DATESTRING', + 0x0161: 'NUMBERSTRING', + 0x0162: 'ROMAN', + 0x0163: 'OPEN.DIALOG', + 0x0164: 'SAVE.DIALOG', + 0x0165: 'VIEW.GET', + 0x0166: 'GETPIVOTDATA', + 0x0167: 'HYPERLINK', + 0x0168: 'PHONETIC', + 0x0169: 'AVERAGEA', + 0x016A: 'MAXA', + 0x016B: 'MINA', + 0x016C: 'STDEVPA', + 0x016D: 'VARPA', + 0x016E: 'STDEVA', + 0x016F: 'VARA', + 0x0170: 'BAHTTEXT', + 0x0171: 'THAIDAYOFWEEK', + 0x0172: 'THAIDIGIT', + 0x0173: 'THAIMONTHOFYEAR', + 0x0174: 'THAINUMSOUND', + 0x0175: 'THAINUMSTRING', + 0x0176: 'THAISTRINGLENGTH', + 0x0177: 'ISTHAIDIGIT', + 0x0178: 'ROUNDBAHTDOWN', + 0x0179: 'ROUNDBAHTUP', + 0x017A: 'THAIYEAR', + 0x017B: 'RTD' +}; +var FtabArgc = { + 0x0002: 1, /* ISNA */ + 0x0003: 1, /* ISERROR */ + 0x000F: 1, /* SIN */ + 0x0010: 1, /* COS */ + 0x0011: 1, /* TAN */ + 0x0012: 1, /* ATAN */ + 0x0014: 1, /* SQRT */ + 0x0015: 1, /* EXP */ + 0x0016: 1, /* LN */ + 0x0017: 1, /* LOG10 */ + 0x0018: 1, /* ABS */ + 0x0019: 1, /* INT */ + 0x001A: 1, /* SIGN */ + 0x001B: 2, /* ROUND */ + 0x001E: 2, /* REPT */ + 0x001F: 3, /* MID */ + 0x0020: 1, /* LEN */ + 0x0021: 1, /* VALUE */ + 0x0026: 1, /* NOT */ + 0x0027: 2, /* MOD */ + 0x0028: 3, /* DCOUNT */ + 0x0029: 3, /* DSUM */ + 0x002A: 3, /* DAVERAGE */ + 0x002B: 3, /* DMIN */ + 0x002C: 3, /* DMAX */ + 0x002D: 3, /* DSTDEV */ + 0x002F: 3, /* DVAR */ + 0x0030: 2, /* TEXT */ + 0x0035: 1, /* GOTO */ + 0x003D: 3, /* MIRR */ + 0x0041: 3, /* DATE */ + 0x0042: 3, /* TIME */ + 0x0043: 1, /* DAY */ + 0x0044: 1, /* MONTH */ + 0x0045: 1, /* YEAR */ + 0x0047: 1, /* HOUR */ + 0x0048: 1, /* MINUTE */ + 0x0049: 1, /* SECOND */ + 0x004B: 1, /* AREAS */ + 0x004C: 1, /* ROWS */ + 0x004D: 1, /* COLUMNS */ + 0x004F: 2, /* ABSREF */ + 0x0050: 2, /* RELREF */ + 0x0053: 1, /* TRANSPOSE */ + 0x0056: 1, /* TYPE */ + 0x005A: 1, /* DEREF */ + 0x0061: 2, /* ATAN2 */ + 0x0062: 1, /* ASIN */ + 0x0063: 1, /* ACOS */ + 0x0069: 1, /* ISREF */ + 0x006F: 1, /* CHAR */ + 0x0070: 1, /* LOWER */ + 0x0071: 1, /* UPPER */ + 0x0072: 1, /* PROPER */ + 0x0075: 2, /* EXACT */ + 0x0076: 1, /* TRIM */ + 0x0077: 4, /* REPLACE */ + 0x0079: 1, /* CODE */ + 0x007E: 1, /* ISERR */ + 0x007F: 1, /* ISTEXT */ + 0x0080: 1, /* ISNUMBER */ + 0x0081: 1, /* ISBLANK */ + 0x0082: 1, /* T */ + 0x0083: 1, /* N */ + 0x0085: 1, /* FCLOSE */ + 0x0086: 1, /* FSIZE */ + 0x0087: 1, /* FREADLN */ + 0x0088: 2, /* FREAD */ + 0x0089: 2, /* FWRITELN */ + 0x008A: 2, /* FWRITE */ + 0x008C: 1, /* DATEVALUE */ + 0x008D: 1, /* TIMEVALUE */ + 0x008E: 3, /* SLN */ + 0x008F: 4, /* SYD */ + 0x00A2: 1, /* CLEAN */ + 0x00A3: 1, /* MDETERM */ + 0x00A4: 1, /* MINVERSE */ + 0x00A5: 2, /* MMULT */ + 0x00AC: 1, /* WHILE */ + 0x00AF: 2, /* INITIATE */ + 0x00B0: 2, /* REQUEST */ + 0x00B1: 3, /* POKE */ + 0x00B2: 2, /* EXECUTE */ + 0x00B3: 1, /* TERMINATE */ + 0x00B8: 1, /* FACT */ + 0x00BD: 3, /* DPRODUCT */ + 0x00BE: 1, /* ISNONTEXT */ + 0x00C3: 3, /* DSTDEVP */ + 0x00C4: 3, /* DVARP */ + 0x00C6: 1, /* ISLOGICAL */ + 0x00C7: 3, /* DCOUNTA */ + 0x00C9: 1, /* UNREGISTER */ + 0x00CF: 4, /* REPLACEB */ + 0x00D2: 3, /* MIDB */ + 0x00D3: 1, /* LENB */ + 0x00D4: 2, /* ROUNDUP */ + 0x00D5: 2, /* ROUNDDOWN */ + 0x00D6: 1, /* ASC */ + 0x00D7: 1, /* DBCS */ + 0x00E5: 1, /* SINH */ + 0x00E6: 1, /* COSH */ + 0x00E7: 1, /* TANH */ + 0x00E8: 1, /* ASINH */ + 0x00E9: 1, /* ACOSH */ + 0x00EA: 1, /* ATANH */ + 0x00EB: 3, /* DGET */ + 0x00F4: 1, /* INFO */ + 0x00FC: 2, /* FREQUENCY */ + 0x0101: 1, /* EVALUATE */ + 0x0105: 1, /* ERROR.TYPE */ + 0x010F: 1, /* GAMMALN */ + 0x0111: 4, /* BINOMDIST */ + 0x0112: 2, /* CHIDIST */ + 0x0113: 2, /* CHIINV */ + 0x0114: 2, /* COMBIN */ + 0x0115: 3, /* CONFIDENCE */ + 0x0116: 3, /* CRITBINOM */ + 0x0117: 1, /* EVEN */ + 0x0118: 3, /* EXPONDIST */ + 0x0119: 3, /* FDIST */ + 0x011A: 3, /* FINV */ + 0x011B: 1, /* FISHER */ + 0x011C: 1, /* FISHERINV */ + 0x011D: 2, /* FLOOR */ + 0x011E: 4, /* GAMMADIST */ + 0x011F: 3, /* GAMMAINV */ + 0x0120: 2, /* CEILING */ + 0x0121: 4, /* HYPGEOMDIST */ + 0x0122: 3, /* LOGNORMDIST */ + 0x0123: 3, /* LOGINV */ + 0x0124: 3, /* NEGBINOMDIST */ + 0x0125: 4, /* NORMDIST */ + 0x0126: 1, /* NORMSDIST */ + 0x0127: 3, /* NORMINV */ + 0x0128: 1, /* NORMSINV */ + 0x0129: 3, /* STANDARDIZE */ + 0x012A: 1, /* ODD */ + 0x012B: 2, /* PERMUT */ + 0x012C: 3, /* POISSON */ + 0x012D: 3, /* TDIST */ + 0x012E: 4, /* WEIBULL */ + 0x012F: 2, /* SUMXMY2 */ + 0x0130: 2, /* SUMX2MY2 */ + 0x0131: 2, /* SUMX2PY2 */ + 0x0132: 2, /* CHITEST */ + 0x0133: 2, /* CORREL */ + 0x0134: 2, /* COVAR */ + 0x0135: 3, /* FORECAST */ + 0x0136: 2, /* FTEST */ + 0x0137: 2, /* INTERCEPT */ + 0x0138: 2, /* PEARSON */ + 0x0139: 2, /* RSQ */ + 0x013A: 2, /* STEYX */ + 0x013B: 2, /* SLOPE */ + 0x013C: 4, /* TTEST */ + 0x0145: 2, /* LARGE */ + 0x0146: 2, /* SMALL */ + 0x0147: 2, /* QUARTILE */ + 0x0148: 2, /* PERCENTILE */ + 0x014B: 2, /* TRIMMEAN */ + 0x014C: 2, /* TINV */ + 0x0151: 2, /* POWER */ + 0x0156: 1, /* RADIANS */ + 0x0157: 1, /* DEGREES */ + 0x015A: 2, /* COUNTIF */ + 0x015B: 1, /* COUNTBLANK */ + 0x015E: 4, /* ISPMT */ + 0x015F: 3, /* DATEDIF */ + 0x0160: 1, /* DATESTRING */ + 0x0161: 2, /* NUMBERSTRING */ + 0x0168: 1, /* PHONETIC */ + 0x0170: 1, /* BAHTTEXT */ + 0x0171: 1, /* THAIDAYOFWEEK */ + 0x0172: 1, /* THAIDIGIT */ + 0x0173: 1, /* THAIMONTHOFYEAR */ + 0x0174: 1, /* THAINUMSOUND */ + 0x0175: 1, /* THAINUMSTRING */ + 0x0176: 1, /* THAISTRINGLENGTH */ + 0x0177: 1, /* ISTHAIDIGIT */ + 0x0178: 1, /* ROUNDBAHTDOWN */ + 0x0179: 1, /* ROUNDBAHTUP */ + 0x017A: 1, /* THAIYEAR */ + 0xFFFF: 0 +}; +/* [MS-XLSX] 2.2.3 Functions */ +var XLSXFutureFunctions = { + "_xlfn.ACOT": "ACOT", + "_xlfn.ACOTH": "ACOTH", + "_xlfn.AGGREGATE": "AGGREGATE", + "_xlfn.ARABIC": "ARABIC", + "_xlfn.AVERAGEIF": "AVERAGEIF", + "_xlfn.AVERAGEIFS": "AVERAGEIFS", + "_xlfn.BASE": "BASE", + "_xlfn.BETA.DIST": "BETA.DIST", + "_xlfn.BETA.INV": "BETA.INV", + "_xlfn.BINOM.DIST": "BINOM.DIST", + "_xlfn.BINOM.DIST.RANGE": "BINOM.DIST.RANGE", + "_xlfn.BINOM.INV": "BINOM.INV", + "_xlfn.BITAND": "BITAND", + "_xlfn.BITLSHIFT": "BITLSHIFT", + "_xlfn.BITOR": "BITOR", + "_xlfn.BITRSHIFT": "BITRSHIFT", + "_xlfn.BITXOR": "BITXOR", + "_xlfn.CEILING.MATH": "CEILING.MATH", + "_xlfn.CEILING.PRECISE": "CEILING.PRECISE", + "_xlfn.CHISQ.DIST": "CHISQ.DIST", + "_xlfn.CHISQ.DIST.RT": "CHISQ.DIST.RT", + "_xlfn.CHISQ.INV": "CHISQ.INV", + "_xlfn.CHISQ.INV.RT": "CHISQ.INV.RT", + "_xlfn.CHISQ.TEST": "CHISQ.TEST", + "_xlfn.COMBINA": "COMBINA", + "_xlfn.CONFIDENCE.NORM": "CONFIDENCE.NORM", + "_xlfn.CONFIDENCE.T": "CONFIDENCE.T", + "_xlfn.COT": "COT", + "_xlfn.COTH": "COTH", + "_xlfn.COUNTIFS": "COUNTIFS", + "_xlfn.COVARIANCE.P": "COVARIANCE.P", + "_xlfn.COVARIANCE.S": "COVARIANCE.S", + "_xlfn.CSC": "CSC", + "_xlfn.CSCH": "CSCH", + "_xlfn.DAYS": "DAYS", + "_xlfn.DECIMAL": "DECIMAL", + "_xlfn.ECMA.CEILING": "ECMA.CEILING", + "_xlfn.ERF.PRECISE": "ERF.PRECISE", + "_xlfn.ERFC.PRECISE": "ERFC.PRECISE", + "_xlfn.EXPON.DIST": "EXPON.DIST", + "_xlfn.F.DIST": "F.DIST", + "_xlfn.F.DIST.RT": "F.DIST.RT", + "_xlfn.F.INV": "F.INV", + "_xlfn.F.INV.RT": "F.INV.RT", + "_xlfn.F.TEST": "F.TEST", + "_xlfn.FILTERXML": "FILTERXML", + "_xlfn.FLOOR.MATH": "FLOOR.MATH", + "_xlfn.FLOOR.PRECISE": "FLOOR.PRECISE", + "_xlfn.FORMULATEXT": "FORMULATEXT", + "_xlfn.GAMMA": "GAMMA", + "_xlfn.GAMMA.DIST": "GAMMA.DIST", + "_xlfn.GAMMA.INV": "GAMMA.INV", + "_xlfn.GAMMALN.PRECISE": "GAMMALN.PRECISE", + "_xlfn.GAUSS": "GAUSS", + "_xlfn.HYPGEOM.DIST": "HYPGEOM.DIST", + "_xlfn.IFNA": "IFNA", + "_xlfn.IFERROR": "IFERROR", + "_xlfn.IMCOSH": "IMCOSH", + "_xlfn.IMCOT": "IMCOT", + "_xlfn.IMCSC": "IMCSC", + "_xlfn.IMCSCH": "IMCSCH", + "_xlfn.IMSEC": "IMSEC", + "_xlfn.IMSECH": "IMSECH", + "_xlfn.IMSINH": "IMSINH", + "_xlfn.IMTAN": "IMTAN", + "_xlfn.ISFORMULA": "ISFORMULA", + "_xlfn.ISO.CEILING": "ISO.CEILING", + "_xlfn.ISOWEEKNUM": "ISOWEEKNUM", + "_xlfn.LOGNORM.DIST": "LOGNORM.DIST", + "_xlfn.LOGNORM.INV": "LOGNORM.INV", + "_xlfn.MODE.MULT": "MODE.MULT", + "_xlfn.MODE.SNGL": "MODE.SNGL", + "_xlfn.MUNIT": "MUNIT", + "_xlfn.NEGBINOM.DIST": "NEGBINOM.DIST", + "_xlfn.NETWORKDAYS.INTL": "NETWORKDAYS.INTL", + "_xlfn.NIGBINOM": "NIGBINOM", + "_xlfn.NORM.DIST": "NORM.DIST", + "_xlfn.NORM.INV": "NORM.INV", + "_xlfn.NORM.S.DIST": "NORM.S.DIST", + "_xlfn.NORM.S.INV": "NORM.S.INV", + "_xlfn.NUMBERVALUE": "NUMBERVALUE", + "_xlfn.PDURATION": "PDURATION", + "_xlfn.PERCENTILE.EXC": "PERCENTILE.EXC", + "_xlfn.PERCENTILE.INC": "PERCENTILE.INC", + "_xlfn.PERCENTRANK.EXC": "PERCENTRANK.EXC", + "_xlfn.PERCENTRANK.INC": "PERCENTRANK.INC", + "_xlfn.PERMUTATIONA": "PERMUTATIONA", + "_xlfn.PHI": "PHI", + "_xlfn.POISSON.DIST": "POISSON.DIST", + "_xlfn.QUARTILE.EXC": "QUARTILE.EXC", + "_xlfn.QUARTILE.INC": "QUARTILE.INC", + "_xlfn.QUERYSTRING": "QUERYSTRING", + "_xlfn.RANK.AVG": "RANK.AVG", + "_xlfn.RANK.EQ": "RANK.EQ", + "_xlfn.RRI": "RRI", + "_xlfn.SEC": "SEC", + "_xlfn.SECH": "SECH", + "_xlfn.SHEET": "SHEET", + "_xlfn.SHEETS": "SHEETS", + "_xlfn.SKEW.P": "SKEW.P", + "_xlfn.STDEV.P": "STDEV.P", + "_xlfn.STDEV.S": "STDEV.S", + "_xlfn.SUMIFS": "SUMIFS", + "_xlfn.T.DIST": "T.DIST", + "_xlfn.T.DIST.2T": "T.DIST.2T", + "_xlfn.T.DIST.RT": "T.DIST.RT", + "_xlfn.T.INV": "T.INV", + "_xlfn.T.INV.2T": "T.INV.2T", + "_xlfn.T.TEST": "T.TEST", + "_xlfn.UNICHAR": "UNICHAR", + "_xlfn.UNICODE": "UNICODE", + "_xlfn.VAR.P": "VAR.P", + "_xlfn.VAR.S": "VAR.S", + "_xlfn.WEBSERVICE": "WEBSERVICE", + "_xlfn.WEIBULL.DIST": "WEIBULL.DIST", + "_xlfn.WORKDAY.INTL": "WORKDAY.INTL", + "_xlfn.XOR": "XOR", + "_xlfn.Z.TEST": "Z.TEST" +}; + diff --git a/bits/68_wsbin.js b/bits/68_wsbin.js index 79e3198..fd5f1e0 100644 --- a/bits/68_wsbin.js +++ b/bits/68_wsbin.js @@ -16,70 +16,70 @@ function parse_BrtWsProp(data, length) { var z = {}; /* TODO: pull flags */ data.l += 19; - z.name = parse_CodeName(data, length - 19); + z.name = parse_XLSBCodeName(data, length - 19); return z; } /* [MS-XLSB] 2.4.303 BrtCellBlank */ function parse_BrtCellBlank(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); return [cell]; } function write_BrtCellBlank(cell, val, o) { if(o == null) o = new_buf(8); - return write_Cell(val, o); + return write_XLSBCell(val, o); } /* [MS-XLSB] 2.4.304 BrtCellBool */ function parse_BrtCellBool(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var fBool = data.read_shift(1); return [cell, fBool, 'b']; } /* [MS-XLSB] 2.4.305 BrtCellError */ function parse_BrtCellError(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var fBool = data.read_shift(1); return [cell, fBool, 'e']; } /* [MS-XLSB] 2.4.308 BrtCellIsst */ function parse_BrtCellIsst(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var isst = data.read_shift(4); return [cell, isst, 's']; } /* [MS-XLSB] 2.4.310 BrtCellReal */ function parse_BrtCellReal(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = parse_Xnum(data); return [cell, value, 'n']; } /* [MS-XLSB] 2.4.311 BrtCellRk */ function parse_BrtCellRk(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = parse_RkNumber(data); return [cell, value, 'n']; } /* [MS-XLSB] 2.4.314 BrtCellSt */ function parse_BrtCellSt(data, length) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = parse_XLWideString(data); return [cell, value, 'str']; } /* [MS-XLSB] 2.4.647 BrtFmlaBool */ function parse_BrtFmlaBool(data, length, opts) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = data.read_shift(1); var o = [cell, value, 'b']; if(opts.cellFormula) { - var formula = parse_CellParsedFormula(data, length-9); + var formula = parse_XLSBCellParsedFormula(data, length-9); o[3] = ""; /* TODO */ } else data.l += length-9; @@ -88,11 +88,11 @@ function parse_BrtFmlaBool(data, length, opts) { /* [MS-XLSB] 2.4.648 BrtFmlaError */ function parse_BrtFmlaError(data, length, opts) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = data.read_shift(1); var o = [cell, value, 'e']; if(opts.cellFormula) { - var formula = parse_CellParsedFormula(data, length-9); + var formula = parse_XLSBCellParsedFormula(data, length-9); o[3] = ""; /* TODO */ } else data.l += length-9; @@ -101,11 +101,11 @@ function parse_BrtFmlaError(data, length, opts) { /* [MS-XLSB] 2.4.649 BrtFmlaNum */ function parse_BrtFmlaNum(data, length, opts) { - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = parse_Xnum(data); var o = [cell, value, 'n']; if(opts.cellFormula) { - var formula = parse_CellParsedFormula(data, length - 16); + var formula = parse_XLSBCellParsedFormula(data, length - 16); o[3] = ""; /* TODO */ } else data.l += length-16; @@ -115,11 +115,11 @@ function parse_BrtFmlaNum(data, length, opts) { /* [MS-XLSB] 2.4.650 BrtFmlaString */ function parse_BrtFmlaString(data, length, opts) { var start = data.l; - var cell = parse_Cell(data); + var cell = parse_XLSBCell(data); var value = parse_XLWideString(data); var o = [cell, value, 'str']; if(opts.cellFormula) { - var formula = parse_CellParsedFormula(data, start + length - data.l); + var formula = parse_XLSBCellParsedFormula(data, start + length - data.l); } else data.l = start + length; return o; diff --git a/bits/80_xlml.js b/bits/80_xlml.js new file mode 100644 index 0000000..f9fef28 --- /dev/null +++ b/bits/80_xlml.js @@ -0,0 +1,699 @@ +var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; +var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/; +var _chr = function(c) { return String.fromCharCode(c); }; +function xlml_parsexmltag(tag, skip_root) { + var words = tag.split(/\s+/); + var z = []; if(!skip_root) z[0] = words[0]; + if(words.length === 1) return z; + var m = tag.match(attregexg2), y, j, w, i; + if(m) for(i = 0; i != m.length; ++i) { + y = m[i].match(attregex2); + if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2); + else { + if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6); + else w = y[1].substr(j+1); + z[w] = y[2].substr(1,y[2].length-2); + } + } + return z; +} +function xlml_parsexmltagobj(tag) { + var words = tag.split(/\s+/); + var z = {}; + if(words.length === 1) return z; + var m = tag.match(attregexg2), y, j, w, i; + if(m) for(i = 0; i != m.length; ++i) { + y = m[i].match(attregex2); + if((j=y[1].indexOf(":")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2); + else { + if(y[1].substr(0,6) === "xmlns:") w = "xmlns"+y[1].substr(6); + else w = y[1].substr(j+1); + z[w] = y[2].substr(1,y[2].length-2); + } + } + return z; +} + +// ---- + +function xlml_format(format, value) { + var fmt = XLMLFormatMap[format] || unescapexml(format); + if(fmt === "General") return SSF._general(value); + return SSF.format(fmt, value); +} + +function xlml_set_custprop(Custprops, Rn, cp, val) { + switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]) { + case "boolean": val = parsexmlbool(val); break; + case "i2": case "int": val = parseInt(val, 10); break; + case "r4": case "float": val = parseFloat(val); break; + case "date": case "dateTime.tz": val = new Date(val); break; + case "i8": case "string": case "fixed": case "uuid": case "bin.base64": break; + default: throw "bad custprop:" + cp[0]; + } + Custprops[unescapexml(Rn[3])] = val; +} + +function safe_format_xlml(cell, nf, o) { + try { + if(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; } + else if(nf === "General") { + if(cell.t === 'n') { + if((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v); + else cell.w = SSF._general_num(cell.v); + } + else cell.w = SSF._general(cell.v); + } + else cell.w = xlml_format(nf||"General", cell.v); + if(o.cellNF) cell.z = XLMLFormatMap[nf]||nf||"General"; + } catch(e) { if(o.WTF) throw e; } +} + +function process_style_xlml(styles, stag, opts) { + if(opts.cellStyles) { + if(stag.Interior) { + var I = stag.Interior; + if(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern; + } + } + styles[stag.ID] = stag; +} + +/* TODO: there must exist some form of OSP-blessed spec */ +function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, o) { + var nf = "General", sid = cell.StyleID, S = {}; o = o || {}; + var interiors = []; + if(sid === undefined && row) sid = row.StyleID; + if(sid === undefined && csty) sid = csty.StyleID; + while(styles[sid] !== undefined) { + if(styles[sid].nf) nf = styles[sid].nf; + if(styles[sid].Interior) interiors.push(styles[sid].Interior); + if(!styles[sid].Parent) break; + sid = styles[sid].Parent; + } + switch(data.Type) { + case 'Boolean': + cell.t = 'b'; + cell.v = parsexmlbool(xml); + break; + case 'String': + cell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml)); + cell.v = xml.indexOf("<") > -1 ? ss : cell.r; + break; + case 'DateTime': + cell.v = (Date.parse(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); + if(cell.v !== cell.v) cell.v = unescapexml(xml); + else if(cell.v >= 1 && cell.v<60) cell.v = cell.v -1; + if(!nf || nf == "General") nf = "yyyy-mm-dd"; + /* falls through */ + case 'Number': + if(cell.v === undefined) cell.v=+xml; + if(!cell.t) cell.t = 'n'; + break; + case 'Error': cell.t = 'e'; cell.v = RBErr[xml]; cell.w = xml; break; + default: cell.t = 's'; cell.v = xlml_fixstr(ss); break; + } + safe_format_xlml(cell, nf, o); + if(o.cellFormula != null && cell.Formula) { + cell.f = rc_to_a1(unescapexml(cell.Formula), base); + cell.Formula = undefined; + } + if(o.cellStyles) { + interiors.forEach(function(x) { + if(!S.patternType && x.patternType) S.patternType = x.patternType; + }); + cell.s = S; + } + cell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default'; +} + +function xlml_clean_comment(comment) { + comment.t = comment.v; + comment.v = comment.w = comment.ixfe = undefined; +} + +function xlml_normalize(d) { + if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); + if(typeof d === 'string') return d; + throw "badf"; +} + +/* TODO: Everything */ +var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg; +function parse_xlml_xml(d, opts) { + var str = xlml_normalize(d); + var Rn; + var state = [], tmp; + var sheets = {}, sheetnames = [], cursheet = {}, sheetname = ""; + var table = {}, cell = {}, row = {}, dtag, didx; + var c = 0, r = 0; + var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; + var styles = {}, stag = {}; + var ss = "", fidx = 0; + var mergecells = []; + var Props = {}, Custprops = {}, pidx = 0, cp = {}; + var comments = [], comment = {}; + var cstys = [], csty; + xlmlregex.lastIndex = 0; + while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { + case 'Data': + if(state[state.length-1][1]) break; + if(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]=="Comment"?comment:cell, {c:c,r:r}, styles, cstys[c], row, opts); + else { ss = ""; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; } + break; + case 'Cell': + if(Rn[1]==='/'){ + if(comments.length > 0) cell.c = comments; + if((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) cursheet[encode_col(c) + encode_row(r)] = cell; + if(cell.HRef) { + cell.l = {Target:cell.HRef, tooltip:cell.HRefScreenTip}; + cell.HRef = cell.HRefScreenTip = undefined; + } + if(cell.MergeAcross || cell.MergeDown) { + var cc = c + (parseInt(cell.MergeAcross,10)|0); + var rr = r + (parseInt(cell.MergeDown,10)|0); + mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}}); + } + ++c; + if(cell.MergeAcross) c += +cell.MergeAcross; + } else { + cell = xlml_parsexmltagobj(Rn[0]); + if(cell.Index) c = +cell.Index - 1; + if(c < refguess.s.c) refguess.s.c = c; + if(c > refguess.e.c) refguess.e.c = c; + if(Rn[0].substr(-2) === "/>") ++c; + comments = []; + } + break; + case 'Row': + if(Rn[1]==='/' || Rn[0].substr(-2) === "/>") { + if(r < refguess.s.r) refguess.s.r = r; + if(r > refguess.e.r) refguess.e.r = r; + if(Rn[0].substr(-2) === "/>") { + row = xlml_parsexmltag(Rn[0]); + if(row.Index) r = +row.Index - 1; + } + c = 0; ++r; + } else { + row = xlml_parsexmltag(Rn[0]); + if(row.Index) r = +row.Index - 1; + } + break; + case 'Worksheet': /* TODO: read range from FullRows/FullColumns */ + if(Rn[1]==='/'){ + if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp; + sheetnames.push(sheetname); + if(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet["!ref"] = encode_range(refguess); + if(mergecells.length) cursheet["!merges"] = mergecells; + sheets[sheetname] = cursheet; + } else { + refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; + r = c = 0; + state.push([Rn[3], false]); + tmp = xlml_parsexmltag(Rn[0]); + sheetname = tmp.Name; + cursheet = {}; + mergecells = []; + } + break; + case 'Table': + if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;} + else if(Rn[0].slice(-2) == "/>") break; + else { + table = xlml_parsexmltag(Rn[0]); + state.push([Rn[3], false]); + cstys = []; + } + break; + + case 'Style': + if(Rn[1]==='/') process_style_xlml(styles, stag, opts); + else stag = xlml_parsexmltag(Rn[0]); + break; + + case 'NumberFormat': + stag.nf = xlml_parsexmltag(Rn[0]).Format || "General"; + break; + + case 'Column': + if(state[state.length-1][0] !== 'Table') break; + csty = xlml_parsexmltag(Rn[0]); + cstys[(csty.Index-1||cstys.length)] = csty; + for(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = csty; + break; + + case 'NamedRange': break; + case 'NamedCell': break; + case 'B': break; + case 'I': break; + case 'U': break; + case 'S': break; + case 'Sub': break; + case 'Sup': break; + case 'Span': break; + case 'Border': break; + case 'Alignment': break; + case 'Borders': break; + case 'Font': + if(Rn[0].substr(-2) === "/>") break; + else if(Rn[1]==="/") ss += str.slice(fidx, Rn.index); + else fidx = Rn.index + Rn[0].length; + break; + case 'Interior': + if(!opts.cellStyles) break; + stag.Interior = xlml_parsexmltag(Rn[0]); + break; + case 'Protection': break; + + case 'Author': + case 'Title': + case 'Description': + case 'Created': + case 'Keywords': + case 'Subject': + case 'Category': + case 'Company': + case 'LastAuthor': + case 'LastSaved': + case 'LastPrinted': + case 'Version': + case 'Revision': + case 'TotalTime': + case 'HyperlinkBase': + case 'Manager': + if(Rn[0].substr(-2) === "/>") break; + else if(Rn[1]==="/") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index)); + else pidx = Rn.index + Rn[0].length; + break; + case 'Paragraphs': break; + + case 'Styles': + case 'Workbook': + if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;} + else state.push([Rn[3], false]); + break; + + case 'Comment': + if(Rn[1]==='/'){ + if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp; + xlml_clean_comment(comment); + comments.push(comment); + } else { + state.push([Rn[3], false]); + tmp = xlml_parsexmltag(Rn[0]); + comment = {a:tmp.Author}; + } + break; + + case 'Name': break; + + case 'ComponentOptions': + case 'DocumentProperties': + case 'CustomDocumentProperties': + case 'OfficeDocumentSettings': + case 'PivotTable': + case 'PivotCache': + case 'Names': + case 'MapInfo': + case 'PageBreaks': + case 'QueryTable': + case 'DataValidation': + case 'AutoFilter': + case 'Sorting': + case 'Schema': + case 'data': + case 'ConditionalFormatting': + case 'SmartTagType': + case 'SmartTags': + case 'ExcelWorkbook': + case 'WorkbookOptions': + case 'WorksheetOptions': + if(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw "Bad state: "+tmp;} + else if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]); + break; + + default: + var seen = true; + switch(state[state.length-1][0]) { + /* OfficeDocumentSettings */ + case 'OfficeDocumentSettings': switch(Rn[3]) { + case 'AllowPNG': break; + case 'RemovePersonalInformation': break; + case 'DownloadComponents': break; + case 'LocationOfComponents': break; + case 'Colors': break; + case 'Color': break; + case 'Index': break; + case 'RGB': break; + case 'PixelsPerInch': break; + case 'TargetScreenSize': break; + case 'ReadOnlyRecommended': break; + default: seen = false; + } break; + + /* ComponentOptions */ + case 'ComponentOptions': switch(Rn[3]) { + case 'Toolbar': break; + case 'HideOfficeLogo': break; + case 'SpreadsheetAutoFit': break; + case 'Label': break; + case 'Caption': break; + case 'MaxHeight': break; + case 'MaxWidth': break; + case 'NextSheetNumber': break; + default: seen = false; + } break; + + /* ExcelWorkbook */ + case 'ExcelWorkbook': switch(Rn[3]) { + case 'WindowHeight': break; + case 'WindowWidth': break; + case 'WindowTopX': break; + case 'WindowTopY': break; + case 'TabRatio': break; + case 'ProtectStructure': break; + case 'ProtectWindows': break; + case 'ActiveSheet': break; + case 'DisplayInkNotes': break; + case 'FirstVisibleSheet': break; + case 'SupBook': break; + case 'SheetName': break; + case 'SheetIndex': break; + case 'SheetIndexFirst': break; + case 'SheetIndexLast': break; + case 'Dll': break; + case 'AcceptLabelsInFormulas': break; + case 'DoNotSaveLinkValues': break; + case 'Date1904': break; + case 'Iteration': break; + case 'MaxIterations': break; + case 'MaxChange': break; + case 'Path': break; + case 'Xct': break; + case 'Count': break; + case 'SelectedSheets': break; + case 'Calculation': break; + case 'Uncalced': break; + case 'StartupPrompt': break; + case 'Crn': break; + case 'ExternName': break; + case 'Formula': break; + case 'ColFirst': break; + case 'ColLast': break; + case 'WantAdvise': break; + case 'Boolean': break; + case 'Error': break; + case 'Text': break; + case 'OLE': break; + case 'NoAutoRecover': break; + case 'PublishObjects': break; + case 'DoNotCalculateBeforeSave': break; + case 'Number': break; + case 'RefModeR1C1': break; + case 'EmbedSaveSmartTags': break; + default: seen = false; + } break; + + /* WorkbookOptions */ + case 'WorkbookOptions': switch(Rn[3]) { + case 'OWCVersion': break; + case 'Height': break; + case 'Width': break; + default: seen = false; + } break; + + /* WorksheetOptions */ + case 'WorksheetOptions': switch(Rn[3]) { + case 'Unsynced': break; + case 'Visible': break; + case 'Print': break; + case 'Panes': break; + case 'Scale': break; + case 'Pane': break; + case 'Number': break; + case 'Layout': break; + case 'Header': break; + case 'Footer': break; + case 'PageSetup': break; + case 'PageMargins': break; + case 'Selected': break; + case 'ProtectObjects': break; + case 'EnableSelection': break; + case 'ProtectScenarios': break; + case 'ValidPrinterInfo': break; + case 'HorizontalResolution': break; + case 'VerticalResolution': break; + case 'NumberofCopies': break; + case 'ActiveRow': break; + case 'ActiveCol': break; + case 'ActivePane': break; + case 'TopRowVisible': break; + case 'TopRowBottomPane': break; + case 'LeftColumnVisible': break; + case 'LeftColumnRightPane': break; + case 'FitToPage': break; + case 'RangeSelection': break; + case 'PaperSizeIndex': break; + case 'PageLayoutZoom': break; + case 'PageBreakZoom': break; + case 'FilterOn': break; + case 'DoNotDisplayGridlines': break; + case 'SplitHorizontal': break; + case 'SplitVertical': break; + case 'FreezePanes': break; + case 'FrozenNoSplit': break; + case 'FitWidth': break; + case 'FitHeight': break; + case 'CommentsLayout': break; + case 'Zoom': break; + case 'LeftToRight': break; + case 'Gridlines': break; + case 'AllowSort': break; + case 'AllowFilter': break; + case 'AllowInsertRows': break; + case 'AllowDeleteRows': break; + case 'AllowInsertCols': break; + case 'AllowDeleteCols': break; + case 'AllowInsertHyperlinks': break; + case 'AllowFormatCells': break; + case 'AllowSizeCols': break; + case 'AllowSizeRows': break; + case 'NoSummaryRowsBelowDetail': break; + case 'TabColorIndex': break; + case 'DoNotDisplayHeadings': break; + case 'ShowPageLayoutZoom': break; + case 'NoSummaryColumnsRightDetail': break; + case 'BlackAndWhite': break; + case 'DoNotDisplayZeros': break; + case 'DisplayPageBreak': break; + case 'RowColHeadings': break; + case 'DoNotDisplayOutline': break; + case 'NoOrientation': break; + case 'AllowUsePivotTables': break; + case 'ZeroHeight': break; + case 'ViewableRange': break; + case 'Selection': break; + case 'ProtectContents': break; + default: seen = false; + } break; + + /* PivotTable */ + case 'PivotTable': case 'PivotCache': switch(Rn[3]) { + case 'ImmediateItemsOnDrop': break; + case 'ShowPageMultipleItemLabel': break; + case 'CompactRowIndent': break; + case 'Location': break; + case 'PivotField': break; + case 'Orientation': break; + case 'LayoutForm': break; + case 'LayoutSubtotalLocation': break; + case 'LayoutCompactRow': break; + case 'Position': break; + case 'PivotItem': break; + case 'DataType': break; + case 'DataField': break; + case 'SourceName': break; + case 'ParentField': break; + case 'PTLineItems': break; + case 'PTLineItem': break; + case 'CountOfSameItems': break; + case 'Item': break; + case 'ItemType': break; + case 'PTSource': break; + case 'CacheIndex': break; + case 'ConsolidationReference': break; + case 'FileName': break; + case 'Reference': break; + case 'NoColumnGrand': break; + case 'NoRowGrand': break; + case 'BlankLineAfterItems': break; + case 'Hidden': break; + case 'Subtotal': break; + case 'BaseField': break; + case 'MapChildItems': break; + case 'Function': break; + case 'RefreshOnFileOpen': break; + case 'PrintSetTitles': break; + case 'MergeLabels': break; + case 'DefaultVersion': break; + case 'RefreshName': break; + case 'RefreshDate': break; + case 'RefreshDateCopy': break; + case 'VersionLastRefresh': break; + case 'VersionLastUpdate': break; + case 'VersionUpdateableMin': break; + case 'VersionRefreshableMin': break; + case 'Calculation': break; + default: seen = false; + } break; + + /* PageBreaks */ + case 'PageBreaks': switch(Rn[3]) { + case 'ColBreaks': break; + case 'ColBreak': break; + case 'RowBreaks': break; + case 'RowBreak': break; + case 'ColStart': break; + case 'ColEnd': break; + case 'RowEnd': break; + default: seen = false; + } break; + + /* AutoFilter */ + case 'AutoFilter': switch(Rn[3]) { + case 'AutoFilterColumn': break; + case 'AutoFilterCondition': break; + case 'AutoFilterAnd': break; + case 'AutoFilterOr': break; + default: seen = false; + } break; + + /* QueryTable */ + case 'QueryTable': switch(Rn[3]) { + case 'Id': break; + case 'AutoFormatFont': break; + case 'AutoFormatPattern': break; + case 'QuerySource': break; + case 'QueryType': break; + case 'EnableRedirections': break; + case 'RefreshedInXl9': break; + case 'URLString': break; + case 'HTMLTables': break; + case 'Connection': break; + case 'CommandText': break; + case 'RefreshInfo': break; + case 'NoTitles': break; + case 'NextId': break; + case 'ColumnInfo': break; + case 'OverwriteCells': break; + case 'DoNotPromptForFile': break; + case 'TextWizardSettings': break; + case 'Source': break; + case 'Number': break; + case 'Decimal': break; + case 'ThousandSeparator': break; + case 'TrailingMinusNumbers': break; + case 'FormatSettings': break; + case 'FieldType': break; + case 'Delimiters': break; + case 'Tab': break; + case 'Comma': break; + case 'AutoFormatName': break; + case 'VersionLastEdit': break; + case 'VersionLastRefresh': break; + default: seen = false; + } break; + + /* Sorting */ + case 'Sorting': + /* ConditionalFormatting */ + case 'ConditionalFormatting': + /* DataValidation */ + case 'DataValidation': switch(Rn[3]) { + case 'Range': break; + case 'Type': break; + case 'Min': break; + case 'Max': break; + case 'Sort': break; + case 'Descending': break; + case 'Order': break; + case 'CaseSensitive': break; + case 'Value': break; + case 'ErrorStyle': break; + case 'ErrorMessage': break; + case 'ErrorTitle': break; + case 'CellRangeList': break; + case 'InputMessage': break; + case 'InputTitle': break; + case 'ComboHide': break; + case 'InputHide': break; + case 'Condition': break; + case 'Qualifier': break; + case 'UseBlank': break; + case 'Value1': break; + case 'Value2': break; + case 'Format': break; + default: seen = false; + } break; + + /* MapInfo (schema) */ + case 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) { + case 'Map': break; + case 'Entry': break; + case 'Range': break; + case 'XPath': break; + case 'Field': break; + case 'XSDType': break; + case 'FilterOn': break; + case 'Aggregate': break; + case 'ElementType': break; + case 'AttributeType': break; + /* These are from xsd (XML Schema Definition) */ + case 'schema': + case 'element': + case 'complexType': + case 'datatype': + case 'all': + case 'attribute': + case 'extends': break; + + case 'row': break; + default: seen = false; + } break; + + /* SmartTags (can be anything) */ + case 'SmartTags': break; + + default: seen = false; break; + } + if(seen) break; + /* CustomDocumentProperties */ + if(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|"); + if(state[state.length-1][0]==='CustomDocumentProperties') { + if(Rn[0].substr(-2) === "/>") break; + else if(Rn[1]==="/") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index)); + else { cp = Rn; pidx = Rn.index + Rn[0].length; } + break; + } + if(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + "|" + state.join("|"); + } + var out = {}; + if(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets; + out.SheetNames = sheetnames; + out.SSF = SSF.get_table(); + out.Props = Props; + out.Custprops = Custprops; + return out; +} + +function parse_xlml(data, opts) { + fix_read_opts(opts=opts||{}); + switch(opts.type||"base64") { + case "base64": return parse_xlml_xml(Base64.decode(data), opts); + case "binary": case "buffer": case "file": return parse_xlml_xml(data, opts); + case "array": return parse_xlml_xml(data.map(_chr).join(""), opts); + } +} + +function write_xlml(wb, opts) { } + diff --git a/bits/81_xls.js b/bits/81_xls.js new file mode 100644 index 0000000..3cd779a --- /dev/null +++ b/bits/81_xls.js @@ -0,0 +1,675 @@ +/* [MS-OLEDS] 2.3.8 CompObjStream */ +function parse_compobj(obj) { + var v = {}; + var o = obj.content; + + /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */ + var l = 28, m; + m = __lpstr(o, l); + l += 4 + __readUInt32LE(o,l); + v.UserType = m; + + /* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */ + m = __readUInt32LE(o,l); l+= 4; + switch(m) { + case 0x00000000: break; + case 0xffffffff: case 0xfffffffe: l+=4; break; + default: + if(m > 0x190) throw new Error("Unsupported Clipboard: " + m.toString(16)); + l += m; + } + + m = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m; + + if((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v; + throw "Unsupported Unicode Extension"; +} + +/* 2.4.58 Continue logic */ +function slurp(R, blob, length, opts) { + var l = length; + var bufs = []; + var d = blob.slice(blob.l,blob.l+l); + if(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) { + case 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break; + default: + if(d.length === 0) break; + opts.enc.insitu_decrypt(d); + } + bufs.push(d); + blob.l += l; + var next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]); + while(next != null && next.n === 'Continue') { + l = __readUInt16LE(blob,blob.l+2); + bufs.push(blob.slice(blob.l+4,blob.l+4+l)); + blob.l += 4+l; + next = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]); + } + var b = bconcat(bufs); + prep_blob(b, 0); + var ll = 0; b.lens = []; + for(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; } + return R.f(b, b.length, opts); +} + +function safe_format_xf(p, opts, date1904) { + if(!p.XF) return; + try { + var fmtid = p.XF.ifmt||0; + if(p.t === 'e') { p.w = p.w || BErr[p.v]; } + else if(fmtid === 0) { + if(p.t === 'n') { + if((p.v|0) === p.v) p.w = SSF._general_int(p.v); + else p.w = SSF._general_num(p.v); + } + else p.w = SSF._general(p.v); + } + else p.w = SSF.format(fmtid,p.v, {date1904:date1904||false}); + if(opts.cellNF) p.z = SSF._table[fmtid]; + } catch(e) { if(opts.WTF) throw e; } +} + +function make_cell(val, ixfe, t) { + return {v:val, ixfe:ixfe, t:t}; +} + +// 2.3.2 +function parse_workbook(blob, options) { + var wb = {opts:{}}; + var Sheets = {}; + var out = {}; + var Directory = {}; + var found_sheet = false; + var range = {}; + var last_formula = null; + var sst = []; + var cur_sheet = ""; + var Preamble = {}; + var lastcell, last_cell, cc, cmnt, rng, rngC, rngR; + var shared_formulae = {}; + var array_formulae = []; /* TODO: something more clever */ + var temp_val; + var country; + var cell_valid = true; + var XFs = []; /* XF records */ + var palette = []; + var get_rgb = function getrgb(icv) { + if(icv < 8) return XLSIcv[icv]; + if(icv < 64) return palette[icv-8] || XLSIcv[icv]; + return XLSIcv[icv]; + }; + var process_cell_style = function pcs(cell, line) { + var xfd = line.XF.data; + if(!xfd || !xfd.patternType) return; + line.s = {}; + line.s.patternType = xfd.patternType; + var t; + if((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; } + if((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; } + }; + var addcell = function addcell(cell, line, options) { + if(!cell_valid) return; + if(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line); + lastcell = cell; + last_cell = encode_cell(cell); + if(range.s) { + if(cell.r < range.s.r) range.s.r = cell.r; + if(cell.c < range.s.c) range.s.c = cell.c; + } + if(range.e) { + if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; + if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; + } + if(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false; + else out[last_cell] = line; + }; + var opts = { + enc: false, // encrypted + sbcch: 0, // cch in the preceding SupBook + snames: [], // sheetnames + sharedf: shared_formulae, // shared formulae by address + arrayf: array_formulae, // array formulae array + rrtabid: [], // RRTabId + lastuser: "", // Last User from WriteAccess + biff: 8, // BIFF version + codepage: 0, // CP from CodePage record + winlocked: 0, // fLockWn from WinProtect + wtf: false + }; + if(options.password) opts.password = options.password; + var mergecells = []; + var objects = []; + var supbooks = [[]]; // 1-indexed, will hold extern names + var sbc = 0, sbci = 0, sbcli = 0; + supbooks.SheetNames = opts.snames; + supbooks.sharedf = opts.sharedf; + supbooks.arrayf = opts.arrayf; + var last_Rn = ''; + var file_depth = 0; /* TODO: make a real stack */ + + /* explicit override for some broken writers */ + opts.codepage = 1200; + set_cp(1200); + + while(blob.l < blob.length - 1) { + var s = blob.l; + var RecordType = blob.read_shift(2); + if(RecordType === 0 && last_Rn === 'EOF') break; + var length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y; + var R = XLSRecordEnum[RecordType]; + if(R && R.f) { + if(options.bookSheets) { + if(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break; + } + last_Rn = R.n; + if(R.r === 2 || R.r == 12) { + var rt = blob.read_shift(2); length -= 2; + if(!opts.enc && rt !== RecordType) throw "rt mismatch"; + if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT + } + //console.error(R,blob.l,length,blob.length); + var val; + if(R.n === 'EOF') val = R.f(blob, length, opts); + else val = slurp(R, blob, length, opts); + var Rn = R.n; + /* BIFF5 overrides */ + if(opts.biff === 5 || opts.biff === 2) switch(Rn) { + case 'Lbl': Rn = 'Label'; break; + } + /* nested switch statements to workaround V8 128 limit */ + switch(Rn) { + /* Workbook Options */ + case 'Date1904': wb.opts.Date1904 = val; break; + case 'WriteProtect': wb.opts.WriteProtect = true; break; + case 'FilePass': + if(!opts.enc) blob.l = 0; + opts.enc = val; + if(opts.WTF) console.error(val); + if(!options.password) throw new Error("File is password-protected"); + if(val.Type !== 0) throw new Error("Encryption scheme unsupported"); + if(!val.valid) throw new Error("Password is incorrect"); + break; + case 'WriteAccess': opts.lastuser = val; break; + case 'FileSharing': break; //TODO + case 'CodePage': + /* overrides based on test cases */ + if(val === 0x5212) val = 1200; + else if(val === 0x8001) val = 1252; + opts.codepage = val; + set_cp(val); + break; + case 'RRTabId': opts.rrtabid = val; break; + case 'WinProtect': opts.winlocked = val; break; + case 'Template': break; // TODO + case 'RefreshAll': wb.opts.RefreshAll = val; break; + case 'BookBool': break; // TODO + case 'UsesELFs': /* if(val) console.error("Unsupported ELFs"); */ break; + case 'MTRSettings': { + if(val[0] && val[1]) throw "Unsupported threads: " + val; + } break; // TODO: actually support threads + case 'CalcCount': wb.opts.CalcCount = val; break; + case 'CalcDelta': wb.opts.CalcDelta = val; break; + case 'CalcIter': wb.opts.CalcIter = val; break; + case 'CalcMode': wb.opts.CalcMode = val; break; + case 'CalcPrecision': wb.opts.CalcPrecision = val; break; + case 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break; + case 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1 + case 'Uncalced': break; + case 'ForceFullCalculation': wb.opts.FullCalc = val; break; + case 'WsBool': break; // TODO + case 'XF': XFs.push(val); break; + case 'ExtSST': break; // TODO + case 'BookExt': break; // TODO + case 'RichTextStream': break; + case 'BkHim': break; + + case 'SupBook': supbooks[++sbc] = [val]; sbci = 0; break; + case 'ExternName': supbooks[sbc][++sbci] = val; break; + case 'Index': break; // TODO + case 'Lbl': supbooks[0][++sbcli] = val; break; + case 'ExternSheet': supbooks[sbc] = supbooks[sbc].concat(val); sbci += val.length; break; + + case 'Protect': out["!protect"] = val; break; /* for sheet or book */ + case 'Password': if(val !== 0 && opts.WTF) console.error("Password verifier: " + val); break; + case 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/ + + case 'BoundSheet8': { + Directory[val.pos] = val; + opts.snames.push(val.name); + } break; + case 'EOF': { + if(--file_depth) break; + if(range.e) { + out["!range"] = range; + if(range.e.r > 0 && range.e.c > 0) { + range.e.r--; range.e.c--; + out["!ref"] = encode_range(range); + range.e.r++; range.e.c++; + } + if(mergecells.length > 0) out["!merges"] = mergecells; + if(objects.length > 0) out["!objects"] = objects; + } + if(cur_sheet === "") Preamble = out; else Sheets[cur_sheet] = out; + out = {}; + } break; + case 'BOF': { + if(opts.biff !== 8); + else if(val.BIFFVer === 0x0500) opts.biff = 5; + else if(val.BIFFVer === 0x0002) opts.biff = 2; + else if(val.BIFFVer === 0x0007) opts.biff = 2; + if(file_depth++) break; + cell_valid = true; + out = {}; + if(opts.biff === 2) { + if(cur_sheet === "") cur_sheet = "Sheet1"; + range = {s:{r:0,c:0},e:{r:0,c:0}}; + } + else cur_sheet = (Directory[s] || {name:""}).name; + mergecells = []; + objects = []; + } break; + case 'Number': case 'BIFF2NUM': { + temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:'n'}; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:val.c, r:val.r}, temp_val, options); + } break; + case 'BoolErr': { + temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:val.c, r:val.r}, temp_val, options); + } break; + case 'RK': { + temp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:val.c, r:val.r}, temp_val, options); + } break; + case 'MulRk': { + for(var j = val.c; j <= val.C; ++j) { + var ixfe = val.rkrec[j-val.c][0]; + temp_val= {ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:j, r:val.r}, temp_val, options); + } + } break; + case 'Formula': { + switch(val.val) { + case 'String': last_formula = val; break; + case 'Array Formula': throw "Array Formula unsupported"; + default: + temp_val = {v:val.val, ixfe:val.cell.ixfe, t:val.tt}; + temp_val.XF = XFs[temp_val.ixfe]; + if(options.cellFormula) temp_val.f = "="+stringify_formula(val.formula,range,val.cell,supbooks, opts); + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell(val.cell, temp_val, options); + last_formula = val; + } + } break; + case 'String': { + if(last_formula) { + last_formula.val = val; + temp_val = {v:last_formula.val, ixfe:last_formula.cell.ixfe, t:'s'}; + temp_val.XF = XFs[temp_val.ixfe]; + if(options.cellFormula) temp_val.f = "="+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts); + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell(last_formula.cell, temp_val, options); + last_formula = null; + } + } break; + case 'Array': { + array_formulae.push(val); + } break; + case 'ShrFmla': { + if(!cell_valid) break; + //if(options.cellFormula) out[last_cell].f = stringify_formula(val[0], range, lastcell, supbooks, opts); + /* TODO: capture range */ + shared_formulae[encode_cell(last_formula.cell)]= val[0]; + } break; + case 'LabelSst': + //temp_val={v:sst[val.isst].t, ixfe:val.ixfe, t:'s'}; + temp_val=make_cell(sst[val.isst].t, val.ixfe, 's'); + temp_val.XF = XFs[temp_val.ixfe]; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:val.c, r:val.r}, temp_val, options); + break; + case 'Label': case 'BIFF2STR': + /* Some writers erroneously write Label */ + temp_val=make_cell(val.val, val.ixfe, 's'); + temp_val.XF = XFs[temp_val.ixfe]; + if(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904); + addcell({c:val.c, r:val.r}, temp_val, options); + break; + case 'Dimensions': { + if(file_depth === 1) range = val; /* TODO: stack */ + } break; + case 'SST': { + sst = val; + } break; + case 'Format': { /* val = [id, fmt] */ + SSF.load(val[1], val[0]); + } break; + + case 'MergeCells': mergecells = mergecells.concat(val); break; + + case 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break; + case 'TxO': opts.lastobj.TxO = val; break; + + case 'HLink': { + for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) + for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) + if(out[encode_cell({c:rngC,r:rngR})]) + out[encode_cell({c:rngC,r:rngR})].l = val[1]; + } break; + case 'HLinkTooltip': { + for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) + for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) + if(out[encode_cell({c:rngC,r:rngR})]) + out[encode_cell({c:rngC,r:rngR})].l.tooltip = val[1]; + } break; + + /* Comments */ + case 'Note': { + if(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */ + cc = out[encode_cell(val[0])]; + var noteobj = objects[val[2]]; + if(!cc) break; + if(!cc.c) cc.c = []; + cmnt = {a:val[1],t:noteobj.TxO.t}; + cc.c.push(cmnt); + } break; + + default: switch(R.n) { /* nested */ + case 'ClrtClient': break; + case 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break; + + case 'NameCmt': break; + case 'Header': break; // TODO + case 'Footer': break; // TODO + case 'HCenter': break; // TODO + case 'VCenter': break; // TODO + case 'Pls': break; // TODO + case 'Setup': break; // TODO + case 'DefColWidth': break; // TODO + case 'GCW': break; + case 'LHRecord': break; + case 'ColInfo': break; // TODO + case 'Row': break; // TODO + case 'DBCell': break; // TODO + case 'MulBlank': break; // TODO + case 'EntExU2': break; // TODO + case 'SxView': break; // TODO + case 'Sxvd': break; // TODO + case 'SXVI': break; // TODO + case 'SXVDEx': break; // TODO + case 'SxIvd': break; // TODO + case 'SXDI': break; // TODO + case 'SXLI': break; // TODO + case 'SXEx': break; // TODO + case 'QsiSXTag': break; // TODO + case 'Selection': break; + case 'Feat': break; + case 'FeatHdr': case 'FeatHdr11': break; + case 'Feature11': case 'Feature12': case 'List12': break; + case 'Blank': break; + case 'Country': country = val; break; + case 'RecalcId': break; + case 'DefaultRowHeight': case 'DxGCol': break; // TODO: htmlify + case 'Fbi': case 'Fbi2': case 'GelFrame': break; + case 'Font': break; // TODO + case 'XFCRC': break; // TODO + case 'Style': break; // TODO + case 'StyleExt': break; // TODO + case 'Palette': palette = val; break; // TODO + case 'Theme': break; // TODO + /* Protection */ + case 'ScenarioProtect': break; + case 'ObjProtect': break; + + /* Conditional Formatting */ + case 'CondFmt12': break; + + /* Table */ + case 'Table': break; // TODO + case 'TableStyles': break; // TODO + case 'TableStyle': break; // TODO + case 'TableStyleElement': break; // TODO + + /* PivotTable */ + case 'SXStreamID': break; // TODO + case 'SXVS': break; // TODO + case 'DConRef': break; // TODO + case 'SXAddl': break; // TODO + case 'DConBin': break; // TODO + case 'DConName': break; // TODO + case 'SXPI': break; // TODO + case 'SxFormat': break; // TODO + case 'SxSelect': break; // TODO + case 'SxRule': break; // TODO + case 'SxFilt': break; // TODO + case 'SxItm': break; // TODO + case 'SxDXF': break; // TODO + + /* Scenario Manager */ + case 'ScenMan': break; + + /* Data Consolidation */ + case 'DCon': break; + + /* Watched Cell */ + case 'CellWatch': break; + + /* Print Settings */ + case 'PrintRowCol': break; + case 'PrintGrid': break; + case 'PrintSize': break; + + case 'XCT': break; + case 'CRN': break; + + case 'Scl': { + //console.log("Zoom Level:", val[0]/val[1],val); + } break; + case 'SheetExt': { + + } break; + case 'SheetExtOptional': { + + } break; + + /* VBA */ + case 'ObNoMacros': { + + } break; + case 'ObProj': { + + } break; + case 'CodeName': { + + } break; + case 'GUIDTypeLib': { + + } break; + + case 'WOpt': break; // TODO: WTF? + case 'PhoneticInfo': break; + + case 'OleObjectSize': break; + + /* Differential Formatting */ + case 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break; + + /* Data Validation */ + case 'Dv': case 'DVal': break; + + /* Data Series */ + case 'BRAI': case 'Series': case 'SeriesText': break; + + /* Data Connection */ + case 'DConn': break; + case 'DbOrParamQry': break; + case 'DBQueryExt': break; + + /* Formatting */ + case 'IFmtRecord': break; + case 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break; + + /* Explicitly Ignored */ + case 'Excel9File': break; + case 'Units': break; + case 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount': + /* View Stuff */ + case 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts': + case 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': + case 'Pane': break; + default: switch(R.n) { /* nested */ + /* Chart */ + case 'Dat': + case 'Begin': case 'End': + case 'StartBlock': case 'EndBlock': + case 'Frame': case 'Area': + case 'Axis': case 'AxisLine': case 'Tick': break; + case 'AxesUsed': + case 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break; + case 'LineFormat': case 'AreaFormat': + case 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break; + case 'PlotArea': case 'PlotGrowth': break; + case 'SeriesList': case 'SerParent': case 'SerAuxTrend': break; + case 'DataFormat': case 'SerToCrt': case 'FontX': break; + case 'CatSerRange': case 'AxcExt': case 'SerFmt': break; + case 'ShtProps': break; + case 'DefaultText': case 'Text': case 'CatLab': break; + case 'DataLabExtContents': break; + case 'Legend': case 'LegendException': break; + case 'Pie': case 'Scatter': break; + case 'PieFormat': case 'MarkerFormat': break; + case 'StartObject': case 'EndObject': break; + case 'AlRuns': case 'ObjectLink': break; + case 'SIIndex': break; + case 'AttachedLabel': case 'YMult': break; + + /* Chart Group */ + case 'Line': case 'Bar': break; + case 'Surf': break; + + /* Axis Group */ + case 'AxisParent': break; + case 'Pos': break; + case 'ValueRange': break; + + /* Pivot Chart */ + case 'SXViewEx9': break; // TODO + case 'SXViewLink': break; + case 'PivotChartBits': break; + case 'SBaseRef': break; + case 'TextPropsStream': break; + + /* Chart Misc */ + case 'LnExt': break; + case 'MkrExt': break; + case 'CrtCoopt': break; + + /* Query Table */ + case 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break; + case 'TxtQry': break; + + /* Filter */ + case 'FilterMode': break; + case 'AutoFilter': case 'AutoFilterInfo': break; + case 'AutoFilter12': break; + case 'DropDownObjIds': break; + case 'Sort': break; + case 'SortData': break; + + /* Drawing */ + case 'ShapePropsStream': break; + case 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break; + case 'ImData': break; + /* Pub Stuff */ + case 'WebPub': case 'AutoWebPub': + + /* Print Stuff */ + case 'RightMargin': case 'LeftMargin': case 'TopMargin': case 'BottomMargin': + case 'HeaderFooter': case 'HFPicture': case 'PLV': + case 'HorizontalPageBreaks': case 'VerticalPageBreaks': + /* Behavioral */ + case 'Backup': case 'CompressPictures': case 'Compat12': break; + + /* Should not Happen */ + case 'Continue': case 'ContinueFrt12': break; + + /* Future Records */ + case 'FrtFontList': case 'FrtWrapper': break; + + /* BIFF5 records */ + case 'ExternCount': break; + case 'RString': break; + case 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break; + + default: switch(R.n) { /* nested */ + /* Miscellaneous */ + case 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt': + case 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData': + case 'Name': break; + default: if(options.WTF) throw 'Unrecognized Record ' + R.n; + }}}} + } else blob.l += length; + } + var sheetnamesraw = opts.biff === 2 ? ['Sheet1'] : Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;}); + var sheetnames = sheetnamesraw.slice(); + wb.Directory=sheetnamesraw; + wb.SheetNames=sheetnamesraw; + if(!options.bookSheets) wb.Sheets=Sheets; + wb.Preamble=Preamble; + wb.Strings = sst; + wb.SSF = SSF.get_table(); + if(opts.enc) wb.Encryption = opts.enc; + wb.Metadata = {}; + if(country !== undefined) wb.Metadata.Country = country; + return wb; +} + +function parse_xlscfb(cfb, options) { +if(!options) options = {}; +fix_read_opts(options); +reset_cp(); +var CompObj, Summary, Workbook; +if(cfb.find) { + CompObj = cfb.find('!CompObj'); + Summary = cfb.find('!SummaryInformation'); + Workbook = cfb.find('/Workbook'); +} else { + prep_blob(cfb, 0); + Workbook = {content: cfb}; +} + +if(!Workbook) Workbook = cfb.find('/Book'); +var CompObjP, SummaryP, WorkbookP; + +if(CompObj) CompObjP = parse_compobj(CompObj); +if(options.bookProps && !options.bookSheets) WorkbookP = {}; +else { + if(Workbook) WorkbookP = parse_workbook(Workbook.content, options, !!Workbook.find); + else throw new Error("Cannot find Workbook stream"); +} + +if(cfb.find) parse_props(cfb); + +var props = {}; +for(var y in cfb.Summary) props[y] = cfb.Summary[y]; +for(y in cfb.DocSummary) props[y] = cfb.DocSummary[y]; +WorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */ +if(options.bookFiles) WorkbookP.cfb = cfb; +WorkbookP.CompObjP = CompObjP; +return WorkbookP; +} + +/* TODO: WTF */ +function parse_props(cfb) { + /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */ + var DSI = cfb.find('!DocumentSummaryInformation'); + if(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {} + + /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/ + var SI = cfb.find('!SummaryInformation'); + if(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {} +} + diff --git a/bits/82_parsetab.js b/bits/82_parsetab.js index be0e5b0..fba9b77 100644 --- a/bits/82_parsetab.js +++ b/bits/82_parsetab.js @@ -1,5 +1,5 @@ /* [MS-XLSB] 2.3 Record Enumeration */ -var RecordEnum = { +var XLSBRecordEnum = { 0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr }, 0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank }, 0x0002: { n:"BrtCellRk", f:parse_BrtCellRk }, @@ -822,4 +822,409 @@ var RecordEnum = { 0xFFFF: { n:"", f:parsenoop } }; -var evert_RE = evert_key(RecordEnum, 'n'); +var evert_RE = evert_key(XLSBRecordEnum, 'n'); + +/* [MS-XLS] 2.3 Record Enumeration */ +var XLSRecordEnum = { + 0x0003: { n:"BIFF2NUM", f:parse_BIFF2NUM }, + 0x0004: { n:"BIFF2STR", f:parse_BIFF2STR }, + 0x0006: { n:"Formula", f:parse_Formula }, + 0x0009: { n:'BOF', f:parse_BOF }, + 0x000a: { n:'EOF', f:parse_EOF }, + 0x000c: { n:"CalcCount", f:parse_CalcCount }, + 0x000d: { n:"CalcMode", f:parse_CalcMode }, + 0x000e: { n:"CalcPrecision", f:parse_CalcPrecision }, + 0x000f: { n:"CalcRefMode", f:parse_CalcRefMode }, + 0x0010: { n:"CalcDelta", f:parse_CalcDelta }, + 0x0011: { n:"CalcIter", f:parse_CalcIter }, + 0x0012: { n:"Protect", f:parse_Protect }, + 0x0013: { n:"Password", f:parse_Password }, + 0x0014: { n:"Header", f:parse_Header }, + 0x0015: { n:"Footer", f:parse_Footer }, + 0x0017: { n:"ExternSheet", f:parse_ExternSheet }, + 0x0018: { n:"Lbl", f:parse_Lbl }, + 0x0019: { n:"WinProtect", f:parse_WinProtect }, + 0x001a: { n:"VerticalPageBreaks", f:parse_VerticalPageBreaks }, + 0x001b: { n:"HorizontalPageBreaks", f:parse_HorizontalPageBreaks }, + 0x001c: { n:"Note", f:parse_Note }, + 0x001d: { n:"Selection", f:parse_Selection }, + 0x0022: { n:"Date1904", f:parse_Date1904 }, + 0x0023: { n:"ExternName", f:parse_ExternName }, + 0x0026: { n:"LeftMargin", f:parse_LeftMargin }, + 0x0027: { n:"RightMargin", f:parse_RightMargin }, + 0x0028: { n:"TopMargin", f:parse_TopMargin }, + 0x0029: { n:"BottomMargin", f:parse_BottomMargin }, + 0x002a: { n:"PrintRowCol", f:parse_PrintRowCol }, + 0x002b: { n:"PrintGrid", f:parse_PrintGrid }, + 0x002f: { n:"FilePass", f:parse_FilePass }, + 0x0031: { n:"Font", f:parse_Font }, + 0x0033: { n:"PrintSize", f:parse_PrintSize }, + 0x003c: { n:"Continue", f:parse_Continue }, + 0x003d: { n:"Window1", f:parse_Window1 }, + 0x0040: { n:"Backup", f:parse_Backup }, + 0x0041: { n:"Pane", f:parse_Pane }, + 0x0042: { n:'CodePage', f:parse_CodePage }, + 0x004d: { n:"Pls", f:parse_Pls }, + 0x0050: { n:"DCon", f:parse_DCon }, + 0x0051: { n:"DConRef", f:parse_DConRef }, + 0x0052: { n:"DConName", f:parse_DConName }, + 0x0055: { n:"DefColWidth", f:parse_DefColWidth }, + 0x0059: { n:"XCT", f:parse_XCT }, + 0x005a: { n:"CRN", f:parse_CRN }, + 0x005b: { n:"FileSharing", f:parse_FileSharing }, + 0x005c: { n:'WriteAccess', f:parse_WriteAccess }, + 0x005d: { n:"Obj", f:parse_Obj }, + 0x005e: { n:"Uncalced", f:parse_Uncalced }, + 0x005f: { n:"CalcSaveRecalc", f:parse_CalcSaveRecalc }, + 0x0060: { n:"Template", f:parse_Template }, + 0x0061: { n:"Intl", f:parse_Intl }, + 0x0063: { n:"ObjProtect", f:parse_ObjProtect }, + 0x007d: { n:"ColInfo", f:parse_ColInfo }, + 0x0080: { n:"Guts", f:parse_Guts }, + 0x0081: { n:"WsBool", f:parse_WsBool }, + 0x0082: { n:"GridSet", f:parse_GridSet }, + 0x0083: { n:"HCenter", f:parse_HCenter }, + 0x0084: { n:"VCenter", f:parse_VCenter }, + 0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 }, + 0x0086: { n:"WriteProtect", f:parse_WriteProtect }, + 0x008c: { n:"Country", f:parse_Country }, + 0x008d: { n:"HideObj", f:parse_HideObj }, + 0x0090: { n:"Sort", f:parse_Sort }, + 0x0092: { n:"Palette", f:parse_Palette }, + 0x0097: { n:"Sync", f:parse_Sync }, + 0x0098: { n:"LPr", f:parse_LPr }, + 0x0099: { n:"DxGCol", f:parse_DxGCol }, + 0x009a: { n:"FnGroupName", f:parse_FnGroupName }, + 0x009b: { n:"FilterMode", f:parse_FilterMode }, + 0x009c: { n:"BuiltInFnGroupCount", f:parse_BuiltInFnGroupCount }, + 0x009d: { n:"AutoFilterInfo", f:parse_AutoFilterInfo }, + 0x009e: { n:"AutoFilter", f:parse_AutoFilter }, + 0x00a0: { n:"Scl", f:parse_Scl }, + 0x00a1: { n:"Setup", f:parse_Setup }, + 0x00ae: { n:"ScenMan", f:parse_ScenMan }, + 0x00af: { n:"SCENARIO", f:parse_SCENARIO }, + 0x00b0: { n:"SxView", f:parse_SxView }, + 0x00b1: { n:"Sxvd", f:parse_Sxvd }, + 0x00b2: { n:"SXVI", f:parse_SXVI }, + 0x00b4: { n:"SxIvd", f:parse_SxIvd }, + 0x00b5: { n:"SXLI", f:parse_SXLI }, + 0x00b6: { n:"SXPI", f:parse_SXPI }, + 0x00b8: { n:"DocRoute", f:parse_DocRoute }, + 0x00b9: { n:"RecipName", f:parse_RecipName }, + 0x00bd: { n:"MulRk", f:parse_MulRk }, + 0x00be: { n:"MulBlank", f:parse_MulBlank }, + 0x00c1: { n:'Mms', f:parse_Mms }, + 0x00c5: { n:"SXDI", f:parse_SXDI }, + 0x00c6: { n:"SXDB", f:parse_SXDB }, + 0x00c7: { n:"SXFDB", f:parse_SXFDB }, + 0x00c8: { n:"SXDBB", f:parse_SXDBB }, + 0x00c9: { n:"SXNum", f:parse_SXNum }, + 0x00ca: { n:"SxBool", f:parse_SxBool }, + 0x00cb: { n:"SxErr", f:parse_SxErr }, + 0x00cc: { n:"SXInt", f:parse_SXInt }, + 0x00cd: { n:"SXString", f:parse_SXString }, + 0x00ce: { n:"SXDtr", f:parse_SXDtr }, + 0x00cf: { n:"SxNil", f:parse_SxNil }, + 0x00d0: { n:"SXTbl", f:parse_SXTbl }, + 0x00d1: { n:"SXTBRGIITM", f:parse_SXTBRGIITM }, + 0x00d2: { n:"SxTbpg", f:parse_SxTbpg }, + 0x00d3: { n:"ObProj", f:parse_ObProj }, + 0x00d5: { n:"SXStreamID", f:parse_SXStreamID }, + 0x00d7: { n:"DBCell", f:parse_DBCell }, + 0x00d8: { n:"SXRng", f:parse_SXRng }, + 0x00d9: { n:"SxIsxoper", f:parse_SxIsxoper }, + 0x00da: { n:"BookBool", f:parse_BookBool }, + 0x00dc: { n:"DbOrParamQry", f:parse_DbOrParamQry }, + 0x00dd: { n:"ScenarioProtect", f:parse_ScenarioProtect }, + 0x00de: { n:"OleObjectSize", f:parse_OleObjectSize }, + 0x00e0: { n:"XF", f:parse_XF }, + 0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr }, + 0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd }, + 0x00e3: { n:"SXVS", f:parse_SXVS }, + 0x00e5: { n:"MergeCells", f:parse_MergeCells }, + 0x00e9: { n:"BkHim", f:parse_BkHim }, + 0x00eb: { n:"MsoDrawingGroup", f:parse_MsoDrawingGroup }, + 0x00ec: { n:"MsoDrawing", f:parse_MsoDrawing }, + 0x00ed: { n:"MsoDrawingSelection", f:parse_MsoDrawingSelection }, + 0x00ef: { n:"PhoneticInfo", f:parse_PhoneticInfo }, + 0x00f0: { n:"SxRule", f:parse_SxRule }, + 0x00f1: { n:"SXEx", f:parse_SXEx }, + 0x00f2: { n:"SxFilt", f:parse_SxFilt }, + 0x00f4: { n:"SxDXF", f:parse_SxDXF }, + 0x00f5: { n:"SxItm", f:parse_SxItm }, + 0x00f6: { n:"SxName", f:parse_SxName }, + 0x00f7: { n:"SxSelect", f:parse_SxSelect }, + 0x00f8: { n:"SXPair", f:parse_SXPair }, + 0x00f9: { n:"SxFmla", f:parse_SxFmla }, + 0x00fb: { n:"SxFormat", f:parse_SxFormat }, + 0x00fc: { n:"SST", f:parse_SST }, + 0x00fd: { n:"LabelSst", f:parse_LabelSst }, + 0x00ff: { n:"ExtSST", f:parse_ExtSST }, + 0x0100: { n:"SXVDEx", f:parse_SXVDEx }, + 0x0103: { n:"SXFormula", f:parse_SXFormula }, + 0x0122: { n:"SXDBEx", f:parse_SXDBEx }, + 0x0137: { n:"RRDInsDel", f:parse_RRDInsDel }, + 0x0138: { n:"RRDHead", f:parse_RRDHead }, + 0x013b: { n:"RRDChgCell", f:parse_RRDChgCell }, + 0x013d: { n:"RRTabId", f:parse_RRTabId }, + 0x013e: { n:"RRDRenSheet", f:parse_RRDRenSheet }, + 0x013f: { n:"RRSort", f:parse_RRSort }, + 0x0140: { n:"RRDMove", f:parse_RRDMove }, + 0x014a: { n:"RRFormat", f:parse_RRFormat }, + 0x014b: { n:"RRAutoFmt", f:parse_RRAutoFmt }, + 0x014d: { n:"RRInsertSh", f:parse_RRInsertSh }, + 0x014e: { n:"RRDMoveBegin", f:parse_RRDMoveBegin }, + 0x014f: { n:"RRDMoveEnd", f:parse_RRDMoveEnd }, + 0x0150: { n:"RRDInsDelBegin", f:parse_RRDInsDelBegin }, + 0x0151: { n:"RRDInsDelEnd", f:parse_RRDInsDelEnd }, + 0x0152: { n:"RRDConflict", f:parse_RRDConflict }, + 0x0153: { n:"RRDDefName", f:parse_RRDDefName }, + 0x0154: { n:"RRDRstEtxp", f:parse_RRDRstEtxp }, + 0x015f: { n:"LRng", f:parse_LRng }, + 0x0160: { n:"UsesELFs", f:parse_UsesELFs }, + 0x0161: { n:"DSF", f:parse_DSF }, + 0x0191: { n:"CUsr", f:parse_CUsr }, + 0x0192: { n:"CbUsr", f:parse_CbUsr }, + 0x0193: { n:"UsrInfo", f:parse_UsrInfo }, + 0x0194: { n:"UsrExcl", f:parse_UsrExcl }, + 0x0195: { n:"FileLock", f:parse_FileLock }, + 0x0196: { n:"RRDInfo", f:parse_RRDInfo }, + 0x0197: { n:"BCUsrs", f:parse_BCUsrs }, + 0x0198: { n:"UsrChk", f:parse_UsrChk }, + 0x01a9: { n:"UserBView", f:parse_UserBView }, + 0x01aa: { n:"UserSViewBegin", f:parse_UserSViewBegin }, + 0x01ab: { n:"UserSViewEnd", f:parse_UserSViewEnd }, + 0x01ac: { n:"RRDUserView", f:parse_RRDUserView }, + 0x01ad: { n:"Qsi", f:parse_Qsi }, + 0x01ae: { n:"SupBook", f:parse_SupBook }, + 0x01af: { n:"Prot4Rev", f:parse_Prot4Rev }, + 0x01b0: { n:"CondFmt", f:parse_CondFmt }, + 0x01b1: { n:"CF", f:parse_CF }, + 0x01b2: { n:"DVal", f:parse_DVal }, + 0x01b5: { n:"DConBin", f:parse_DConBin }, + 0x01b6: { n:"TxO", f:parse_TxO }, + 0x01b7: { n:"RefreshAll", f:parse_RefreshAll }, + 0x01b8: { n:"HLink", f:parse_HLink }, + 0x01b9: { n:"Lel", f:parse_Lel }, + 0x01ba: { n:"CodeName", f:parse_XLSCodeName }, + 0x01bb: { n:"SXFDBType", f:parse_SXFDBType }, + 0x01bc: { n:"Prot4RevPass", f:parse_Prot4RevPass }, + 0x01bd: { n:"ObNoMacros", f:parse_ObNoMacros }, + 0x01be: { n:"Dv", f:parse_Dv }, + 0x01c0: { n:"Excel9File", f:parse_Excel9File }, + 0x01c1: { n:"RecalcId", f:parse_RecalcId, r:2}, + 0x01c2: { n:"EntExU2", f:parse_EntExU2 }, + 0x0200: { n:"Dimensions", f:parse_Dimensions }, + 0x0201: { n:"Blank", f:parse_Blank }, + 0x0203: { n:"Number", f:parse_Number }, + 0x0204: { n:"Label", f:parse_Label }, + 0x0205: { n:"BoolErr", f:parse_BoolErr }, + 0x0207: { n:"String", f:parse_String }, + 0x0208: { n:'Row', f:parse_Row }, + 0x020b: { n:"Index", f:parse_Index }, + 0x0221: { n:"Array", f:parse_Array }, + 0x0225: { n:"DefaultRowHeight", f:parse_DefaultRowHeight }, + 0x0236: { n:"Table", f:parse_Table }, + 0x023e: { n:"Window2", f:parse_Window2 }, + 0x027e: { n:"RK", f:parse_RK }, + 0x0293: { n:"Style", f:parse_Style }, + 0x0418: { n:"BigName", f:parse_BigName }, + 0x041e: { n:"Format", f:parse_Format }, + 0x043c: { n:"ContinueBigName", f:parse_ContinueBigName }, + 0x04bc: { n:"ShrFmla", f:parse_ShrFmla }, + 0x0800: { n:"HLinkTooltip", f:parse_HLinkTooltip }, + 0x0801: { n:"WebPub", f:parse_WebPub }, + 0x0802: { n:"QsiSXTag", f:parse_QsiSXTag }, + 0x0803: { n:"DBQueryExt", f:parse_DBQueryExt }, + 0x0804: { n:"ExtString", f:parse_ExtString }, + 0x0805: { n:"TxtQry", f:parse_TxtQry }, + 0x0806: { n:"Qsir", f:parse_Qsir }, + 0x0807: { n:"Qsif", f:parse_Qsif }, + 0x0808: { n:"RRDTQSIF", f:parse_RRDTQSIF }, + 0x0809: { n:'BOF', f:parse_BOF }, + 0x080a: { n:"OleDbConn", f:parse_OleDbConn }, + 0x080b: { n:"WOpt", f:parse_WOpt }, + 0x080c: { n:"SXViewEx", f:parse_SXViewEx }, + 0x080d: { n:"SXTH", f:parse_SXTH }, + 0x080e: { n:"SXPIEx", f:parse_SXPIEx }, + 0x080f: { n:"SXVDTEx", f:parse_SXVDTEx }, + 0x0810: { n:"SXViewEx9", f:parse_SXViewEx9 }, + 0x0812: { n:"ContinueFrt", f:parse_ContinueFrt }, + 0x0813: { n:"RealTimeData", f:parse_RealTimeData }, + 0x0850: { n:"ChartFrtInfo", f:parse_ChartFrtInfo }, + 0x0851: { n:"FrtWrapper", f:parse_FrtWrapper }, + 0x0852: { n:"StartBlock", f:parse_StartBlock }, + 0x0853: { n:"EndBlock", f:parse_EndBlock }, + 0x0854: { n:"StartObject", f:parse_StartObject }, + 0x0855: { n:"EndObject", f:parse_EndObject }, + 0x0856: { n:"CatLab", f:parse_CatLab }, + 0x0857: { n:"YMult", f:parse_YMult }, + 0x0858: { n:"SXViewLink", f:parse_SXViewLink }, + 0x0859: { n:"PivotChartBits", f:parse_PivotChartBits }, + 0x085a: { n:"FrtFontList", f:parse_FrtFontList }, + 0x0862: { n:"SheetExt", f:parse_SheetExt }, + 0x0863: { n:"BookExt", f:parse_BookExt, r:12}, + 0x0864: { n:"SXAddl", f:parse_SXAddl }, + 0x0865: { n:"CrErr", f:parse_CrErr }, + 0x0866: { n:"HFPicture", f:parse_HFPicture }, + 0x0867: { n:'FeatHdr', f:parse_FeatHdr }, + 0x0868: { n:"Feat", f:parse_Feat }, + 0x086a: { n:"DataLabExt", f:parse_DataLabExt }, + 0x086b: { n:"DataLabExtContents", f:parse_DataLabExtContents }, + 0x086c: { n:"CellWatch", f:parse_CellWatch }, + 0x0871: { n:"FeatHdr11", f:parse_FeatHdr11 }, + 0x0872: { n:"Feature11", f:parse_Feature11 }, + 0x0874: { n:"DropDownObjIds", f:parse_DropDownObjIds }, + 0x0875: { n:"ContinueFrt11", f:parse_ContinueFrt11 }, + 0x0876: { n:"DConn", f:parse_DConn }, + 0x0877: { n:"List12", f:parse_List12 }, + 0x0878: { n:"Feature12", f:parse_Feature12 }, + 0x0879: { n:"CondFmt12", f:parse_CondFmt12 }, + 0x087a: { n:"CF12", f:parse_CF12 }, + 0x087b: { n:"CFEx", f:parse_CFEx }, + 0x087c: { n:"XFCRC", f:parse_XFCRC, r:12 }, + 0x087d: { n:"XFExt", f:parse_XFExt, r:12 }, + 0x087e: { n:"AutoFilter12", f:parse_AutoFilter12 }, + 0x087f: { n:"ContinueFrt12", f:parse_ContinueFrt12 }, + 0x0884: { n:"MDTInfo", f:parse_MDTInfo }, + 0x0885: { n:"MDXStr", f:parse_MDXStr }, + 0x0886: { n:"MDXTuple", f:parse_MDXTuple }, + 0x0887: { n:"MDXSet", f:parse_MDXSet }, + 0x0888: { n:"MDXProp", f:parse_MDXProp }, + 0x0889: { n:"MDXKPI", f:parse_MDXKPI }, + 0x088a: { n:"MDB", f:parse_MDB }, + 0x088b: { n:"PLV", f:parse_PLV }, + 0x088c: { n:"Compat12", f:parse_Compat12, r:12 }, + 0x088d: { n:"DXF", f:parse_DXF }, + 0x088e: { n:"TableStyles", f:parse_TableStyles, r:12 }, + 0x088f: { n:"TableStyle", f:parse_TableStyle }, + 0x0890: { n:"TableStyleElement", f:parse_TableStyleElement }, + 0x0892: { n:"StyleExt", f:parse_StyleExt }, + 0x0893: { n:"NamePublish", f:parse_NamePublish }, + 0x0894: { n:"NameCmt", f:parse_NameCmt }, + 0x0895: { n:"SortData", f:parse_SortData }, + 0x0896: { n:"Theme", f:parse_Theme, r:12 }, + 0x0897: { n:"GUIDTypeLib", f:parse_GUIDTypeLib }, + 0x0898: { n:"FnGrp12", f:parse_FnGrp12 }, + 0x0899: { n:"NameFnGrp12", f:parse_NameFnGrp12 }, + 0x089a: { n:"MTRSettings", f:parse_MTRSettings, r:12 }, + 0x089b: { n:"CompressPictures", f:parse_CompressPictures }, + 0x089c: { n:"HeaderFooter", f:parse_HeaderFooter }, + 0x089d: { n:"CrtLayout12", f:parse_CrtLayout12 }, + 0x089e: { n:"CrtMlFrt", f:parse_CrtMlFrt }, + 0x089f: { n:"CrtMlFrtContinue", f:parse_CrtMlFrtContinue }, + 0x08a3: { n:"ForceFullCalculation", f:parse_ForceFullCalculation }, + 0x08a4: { n:"ShapePropsStream", f:parse_ShapePropsStream }, + 0x08a5: { n:"TextPropsStream", f:parse_TextPropsStream }, + 0x08a6: { n:"RichTextStream", f:parse_RichTextStream }, + 0x08a7: { n:"CrtLayout12A", f:parse_CrtLayout12A }, + 0x1001: { n:"Units", f:parse_Units }, + 0x1002: { n:"Chart", f:parse_Chart }, + 0x1003: { n:"Series", f:parse_Series }, + 0x1006: { n:"DataFormat", f:parse_DataFormat }, + 0x1007: { n:"LineFormat", f:parse_LineFormat }, + 0x1009: { n:"MarkerFormat", f:parse_MarkerFormat }, + 0x100a: { n:"AreaFormat", f:parse_AreaFormat }, + 0x100b: { n:"PieFormat", f:parse_PieFormat }, + 0x100c: { n:"AttachedLabel", f:parse_AttachedLabel }, + 0x100d: { n:"SeriesText", f:parse_SeriesText }, + 0x1014: { n:"ChartFormat", f:parse_ChartFormat }, + 0x1015: { n:"Legend", f:parse_Legend }, + 0x1016: { n:"SeriesList", f:parse_SeriesList }, + 0x1017: { n:"Bar", f:parse_Bar }, + 0x1018: { n:"Line", f:parse_Line }, + 0x1019: { n:"Pie", f:parse_Pie }, + 0x101a: { n:"Area", f:parse_Area }, + 0x101b: { n:"Scatter", f:parse_Scatter }, + 0x101c: { n:"CrtLine", f:parse_CrtLine }, + 0x101d: { n:"Axis", f:parse_Axis }, + 0x101e: { n:"Tick", f:parse_Tick }, + 0x101f: { n:"ValueRange", f:parse_ValueRange }, + 0x1020: { n:"CatSerRange", f:parse_CatSerRange }, + 0x1021: { n:"AxisLine", f:parse_AxisLine }, + 0x1022: { n:"CrtLink", f:parse_CrtLink }, + 0x1024: { n:"DefaultText", f:parse_DefaultText }, + 0x1025: { n:"Text", f:parse_Text }, + 0x1026: { n:"FontX", f:parse_FontX }, + 0x1027: { n:"ObjectLink", f:parse_ObjectLink }, + 0x1032: { n:"Frame", f:parse_Frame }, + 0x1033: { n:"Begin", f:parse_Begin }, + 0x1034: { n:"End", f:parse_End }, + 0x1035: { n:"PlotArea", f:parse_PlotArea }, + 0x103a: { n:"Chart3d", f:parse_Chart3d }, + 0x103c: { n:"PicF", f:parse_PicF }, + 0x103d: { n:"DropBar", f:parse_DropBar }, + 0x103e: { n:"Radar", f:parse_Radar }, + 0x103f: { n:"Surf", f:parse_Surf }, + 0x1040: { n:"RadarArea", f:parse_RadarArea }, + 0x1041: { n:"AxisParent", f:parse_AxisParent }, + 0x1043: { n:"LegendException", f:parse_LegendException }, + 0x1044: { n:"ShtProps", f:parse_ShtProps }, + 0x1045: { n:"SerToCrt", f:parse_SerToCrt }, + 0x1046: { n:"AxesUsed", f:parse_AxesUsed }, + 0x1048: { n:"SBaseRef", f:parse_SBaseRef }, + 0x104a: { n:"SerParent", f:parse_SerParent }, + 0x104b: { n:"SerAuxTrend", f:parse_SerAuxTrend }, + 0x104e: { n:"IFmtRecord", f:parse_IFmtRecord }, + 0x104f: { n:"Pos", f:parse_Pos }, + 0x1050: { n:"AlRuns", f:parse_AlRuns }, + 0x1051: { n:"BRAI", f:parse_BRAI }, + 0x105b: { n:"SerAuxErrBar", f:parse_SerAuxErrBar }, + 0x105c: { n:"ClrtClient", f:parse_ClrtClient }, + 0x105d: { n:"SerFmt", f:parse_SerFmt }, + 0x105f: { n:"Chart3DBarShape", f:parse_Chart3DBarShape }, + 0x1060: { n:"Fbi", f:parse_Fbi }, + 0x1061: { n:"BopPop", f:parse_BopPop }, + 0x1062: { n:"AxcExt", f:parse_AxcExt }, + 0x1063: { n:"Dat", f:parse_Dat }, + 0x1064: { n:"PlotGrowth", f:parse_PlotGrowth }, + 0x1065: { n:"SIIndex", f:parse_SIIndex }, + 0x1066: { n:"GelFrame", f:parse_GelFrame }, + 0x1067: { n:"BopPopCustom", f:parse_BopPopCustom }, + 0x1068: { n:"Fbi2", f:parse_Fbi2 }, + + /* These are specified in an older version of the spec */ + 0x0016: { n:"ExternCount", f:parsenoop }, + 0x007e: { n:"RK", f:parsenoop }, /* Not necessarily same as 0x027e */ + 0x007f: { n:"ImData", f:parsenoop }, + 0x0087: { n:"Addin", f:parsenoop }, + 0x0088: { n:"Edg", f:parsenoop }, + 0x0089: { n:"Pub", f:parsenoop }, + 0x0091: { n:"Sub", f:parsenoop }, + 0x0094: { n:"LHRecord", f:parsenoop }, + 0x0095: { n:"LHNGraph", f:parsenoop }, + 0x0096: { n:"Sound", f:parsenoop }, + 0x00a9: { n:"CoordList", f:parsenoop }, + 0x00ab: { n:"GCW", f:parsenoop }, + 0x00bc: { n:"ShrFmla", f:parsenoop }, /* Not necessarily same as 0x04bc */ + 0x00c2: { n:"AddMenu", f:parsenoop }, + 0x00c3: { n:"DelMenu", f:parsenoop }, + 0x00d6: { n:"RString", f:parsenoop }, + 0x00df: { n:"UDDesc", f:parsenoop }, + 0x00ea: { n:"TabIdConf", f:parsenoop }, + 0x0162: { n:"XL5Modify", f:parsenoop }, + 0x01a5: { n:"FileSharing2", f:parsenoop }, + 0x0218: { n:"Name", f:parsenoop }, + 0x0223: { n:"ExternName", f:parse_ExternName }, + 0x0231: { n:"Font", f:parsenoop }, + 0x0406: { n:"Formula", f:parse_Formula }, + 0x086d: { n:"FeatInfo", f:parsenoop }, + 0x0873: { n:"FeatInfo11", f:parsenoop }, + 0x0881: { n:"SXAddl12", f:parsenoop }, + 0x08c0: { n:"AutoWebPub", f:parsenoop }, + 0x08c1: { n:"ListObj", f:parsenoop }, + 0x08c2: { n:"ListField", f:parsenoop }, + 0x08c3: { n:"ListDV", f:parsenoop }, + 0x08c4: { n:"ListCondFmt", f:parsenoop }, + 0x08c5: { n:"ListCF", f:parsenoop }, + 0x08c6: { n:"FMQry", f:parsenoop }, + 0x08c7: { n:"FMSQry", f:parsenoop }, + 0x08c8: { n:"PLV", f:parsenoop }, /* supposedly PLV for Excel 11 */ + 0x08c9: { n:"LnExt", f:parsenoop }, + 0x08ca: { n:"MkrExt", f:parsenoop }, + 0x08cb: { n:"CrtCoopt", f:parsenoop }, + + 0x0000: {} +}; + + diff --git a/bits/84_defaults.js b/bits/84_defaults.js index e0d52bc..4b811ba 100644 --- a/bits/84_defaults.js +++ b/bits/84_defaults.js @@ -21,9 +21,10 @@ var fix_read_opts = fix_opts_func([ ['bookDeps', false], /* parse calculation chains */ ['bookSheets', false], /* only try to get sheet names (no Sheets) */ ['bookProps', false], /* only try to get properties (no Sheets) */ - ['bookFiles', false], /* include raw file structure (keys, files) */ + ['bookFiles', false], /* include raw file structure (keys, files, cfb) */ ['bookVBA', false], /* include vba raw data (vbaraw) */ + ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ ]); diff --git a/bits/87_read.js b/bits/87_read.js index 057f903..4b3cabb 100644 --- a/bits/87_read.js +++ b/bits/87_read.js @@ -1,10 +1,20 @@ -function readSync(data, opts) { +function firstbyte(f,o) { + switch((o||{}).type || "base64") { + case 'buffer': return f[0]; + case 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0); + case 'binary': return f.charCodeAt(0); + case 'array': return f[0]; + default: throw new Error("Unrecognized type " + o.type); + } +} + +function read_zip(data, opts) { var zip, d = data; var o = opts||{}; if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64"; switch(o.type) { case "base64": zip = new jszip(d, { base64:true }); break; - case "binary": zip = new jszip(d, { base64:false }); break; + case "binary": case "array": zip = new jszip(d, { base64:false }); break; case "buffer": zip = new jszip(d); break; case "file": zip=new jszip(d=_fs.readFileSync(data)); break; default: throw new Error("Unrecognized type " + o.type); @@ -12,8 +22,25 @@ function readSync(data, opts) { return parse_zip(zip, o); } +function readSync(data, opts) { + var zip, d = data, isfile = false, n; + var o = opts||{}; + if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64"; + if(o.type == "file") { isfile = true; o.type = "buffer"; d = _fs.readFileSync(data); } + switch((n = firstbyte(d, o))) { + case 0xD0: + if(isfile) o.type = "file"; + return parse_xlscfb(CFB.read(data, o), o); + case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(data) : data), o); + case 0x3C: return parse_xlml(d, o); + case 0x50: + if(isfile) o.type = "file"; + return read_zip(data, opts); + default: throw new Error("Unsupported file " + n); + } +} + function readFileSync(data, opts) { var o = opts||{}; o.type = 'file'; return readSync(data, o); } - diff --git a/bits/88_write.js b/bits/88_write.js index 6dd6670..0428662 100644 --- a/bits/88_write.js +++ b/bits/88_write.js @@ -1,4 +1,4 @@ -function writeSync(wb, opts) { +function write_zip_type(wb, opts) { var o = opts||{}; var z = write_zip(wb, o); switch(o.type) { @@ -10,13 +10,25 @@ function writeSync(wb, opts) { } } +function writeSync(wb, opts) { + var o = opts||{}; + switch(o.bookType) { + case 'xml': return write_xlml(wb, o); + default: return write_zip_type(wb, o); + } +} + function writeFileSync(wb, filename, opts) { var o = opts||{}; o.type = 'file'; o.file = filename; switch(o.file.substr(-5).toLowerCase()) { + case '.xlsx': o.bookType = 'xlsx'; break; case '.xlsm': o.bookType = 'xlsm'; break; case '.xlsb': o.bookType = 'xlsb'; break; - } + default: switch(o.file.substr(-4).toLowerCase()) { + case '.xls': o.bookType = 'xls'; break; + case '.xml': o.bookType = 'xml'; break; + }} return writeSync(wb, o); } diff --git a/bits/90_utils.js b/bits/90_utils.js index 52bb31a..17508ce 100644 --- a/bits/90_utils.js +++ b/bits/90_utils.js @@ -100,7 +100,12 @@ function sheet_to_json(sheet, opts){ for (R = r.s.r + offset; R <= r.e.r; ++R) { rr = encode_row(R); isempty = true; - row = header === 1 ? [] : Object.create({ __rowNum__ : R }); + if(header === 1) row = []; + else { + row = {}; + if(Object.defineProperty) Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); + else row.__rowNum__ = R; + } for (C = r.s.c; C <= r.e.c; ++C) { val = sheet[cols[C] + rr]; if(val === undefined || val.t === undefined) continue; @@ -116,7 +121,7 @@ function sheet_to_json(sheet, opts){ isempty = false; } } - if(isempty === false) out[outi++] = row; + if(isempty === false || header === 1) out[outi++] = row; } out.length = outi; return out; diff --git a/bits/98_exports.js b/bits/98_exports.js index f34c159..df1acd6 100644 --- a/bits/98_exports.js +++ b/bits/98_exports.js @@ -1,7 +1,11 @@ -XLSX.parseZip = parse_zip; -XLSX.read = readSync; -XLSX.readFile = readFileSync; +XLSX.parse_xlscfb = parse_xlscfb; +XLSX.parse_zip = parse_zip; +XLSX.read = readSync; //xlsread +XLSX.readFile = readFileSync; //readFile +XLSX.readFileSync = readFileSync; XLSX.write = writeSync; XLSX.writeFile = writeFileSync; +XLSX.writeFileSync = writeFileSync; XLSX.utils = utils; +XLSX.CFB = CFB; XLSX.SSF = SSF; diff --git a/bits/99_footer.js b/bits/99_footer.js index 5df68cb..50e5f5e 100644 --- a/bits/99_footer.js +++ b/bits/99_footer.js @@ -1 +1,2 @@ })(typeof exports !== 'undefined' ? exports : XLSX); +var XLS = XLSX; diff --git a/bower.json b/bower.json index 799e5dc..3551d9a 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "js-xlsx", "homepage": "https://github.com/SheetJS/js-xlsx", "main": "dist/xlsx.js", - "version": "0.7.12", + "version": "0.8.0", "ignore": [ "bin", "bits", @@ -11,10 +11,13 @@ ], "keywords": [ "excel", + "xls", + "xml", "xlsx", "xlsm", "xlsb", "ods", + "js-xls" "js-xlsx" ] } diff --git a/dist/LICENSE b/dist/LICENSE index 41dcf0c..f769c2c 100644 --- a/dist/LICENSE +++ b/dist/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2012-2014 SheetJS +Copyright (C) 2012-2015 SheetJS Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/dist/cpexcel.js b/dist/cpexcel.js index 4cbe39b..f821c7a 100644 --- a/dist/cpexcel.js +++ b/dist/cpexcel.js @@ -1,6 +1,6 @@ /* cpexcel.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ /*jshint -W100 */ -var cptable = {version:"1.3.6"}; +var cptable = {version:"1.3.7"}; cptable[874] = (function(){ var d = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {"enc": e, "dec": D }; })(); cptable[932] = (function(){ var d = [], e = {}, D = [], j; D[0] = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������".split(""); @@ -832,7 +832,9 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; var sfcc = function sfcc(x) { return String.fromCharCode(x); }; var cca = function cca(x){ return x.charCodeAt(0); }; - if(typeof Buffer !== 'undefined') { + + var has_buf = (typeof Buffer !== 'undefined'); + if(has_buf) { var mdl = 1024, mdb = new Buffer(mdl); var make_EE = function make_EE(E){ var EE = new Buffer(65536); @@ -867,6 +869,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } } out.length = j; + out = out.slice(0,j); } else { out = Buffer(len); for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)]; @@ -925,6 +928,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j]; } out.length = k; + out = out.slice(0,k); } else if(Buffer.isBuffer(data)) { for(i = k = 0; i < len; ++i) { D = data[i]; @@ -939,6 +943,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } } out.length = k; + out = out.slice(0,k); } else { for(i = k = 0; i < len; i++) { j = data[i].charCodeAt(0)*2; @@ -1037,7 +1042,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } var encache = function encache() { - if(typeof Buffer !== 'undefined') { + if(has_buf) { if(cpdcache[sbcs_cache[0]]) return; var i, s; for(i = 0; i < sbcs_cache.length; ++i) { @@ -1063,7 +1068,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; }; var cp_decache = function cp_decache(cp) { cpdcache[cp] = cpecache[cp] = undefined; }; var decache = function decache() { - if(typeof Buffer !== 'undefined') { + if(has_buf) { if(!cpdcache[sbcs_cache[0]]) return; sbcs_cache.forEach(cp_decache); dbcs_cache.forEach(cp_decache); @@ -1086,9 +1091,9 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; var encode = function encode(cp, data, ofmt) { if(cp === last_cp) { return last_enc(data, ofmt); } if(cpecache[cp] !== undefined) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); } - if(typeof Buffer !== 'undefined' && Buffer.isBuffer(data)) data = data.toString('utf8'); + if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8'); var len = data.length; - var out = typeof Buffer !== 'undefined' ? new Buffer(4*len) : [], w, i, j = 0, c, tt, ww; + var out = has_buf ? new Buffer(4*len) : [], w, i, j = 0, c, tt, ww; var C = cpt[cp], E, M; if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) { w = E[data[i]]; @@ -1100,7 +1105,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } else if((M=magic[cp])) switch(M) { case "utf8": - if(typeof Buffer !== 'undefined' && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } for(i = 0; i < len; ++i, ++j) { w = data[i].charCodeAt(0); if(w <= 0x007F) out[j] = w; @@ -1122,7 +1127,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } break; case "ascii": - if(typeof Buffer !== 'undefined' && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } for(i = 0; i < len; ++i, ++j) { w = data[i].charCodeAt(0); if(w <= 0x007F) out[j] = w; @@ -1130,7 +1135,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } break; case "utf16le": - if(typeof Buffer !== 'undefined' && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } + if(has_buf && typeof data === "string") { out = new Buffer(data, M); j = out.length; break; } for(i = 0; i < len; ++i) { w = data[i].charCodeAt(0); out[j++] = w&255; @@ -1182,6 +1187,7 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } else throw new Error("Unrecognized CP: " + cp); out.length = j; + out = out.slice(0,j); if(typeof Buffer === 'undefined') return (ofmt == 'str') ? out.map(sfcc).join("") : out; if(ofmt === undefined || ofmt === 'buf') return out; if(ofmt !== 'arr') return out.toString('binary'); @@ -1222,13 +1228,13 @@ if (typeof module !== 'undefined' && module.exports) module.exports = cptable; } break; case "ascii": - if(typeof Buffer !== 'undefined' && Buffer.isBuffer(data)) return data.toString(M); + if(has_buf && Buffer.isBuffer(data)) return data.toString(M); for(i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]); k = len; break; case "utf16le": i = 0; if(len >= 2 && data[0] == 0xFF) if(data[1] == 0xFE) i = 2; - if(typeof Buffer !== 'undefined' && Buffer.isBuffer(data)) return data.toString(M); + if(has_buf && Buffer.isBuffer(data)) return data.toString(M); j = 2; for(; i < len; i+=j) { out[k++] = String.fromCharCode((data[i+1]<<8) + data[i]); diff --git a/dist/ods.js b/dist/ods.js index 6851c02..9d498b0 100644 --- a/dist/ods.js +++ b/dist/ods.js @@ -15,6 +15,12 @@ var get_utils = function() { throw new Error("Cannot find XLSX utils"); }; var has_buf = (typeof Buffer !== 'undefined'); + +function cc2str(arr) { + var o = ""; + for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]); + return o; +} function getdata(data) { if(!data) return null; if(data.data) return data.data; diff --git a/dist/xlsx.core.min.js b/dist/xlsx.core.min.js index ec4a48c..c7366f6 100644 --- a/dist/xlsx.core.min.js +++ b/dist/xlsx.core.min.js @@ -1,10 +1,13 @@ -/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}},{}],2:[function(_dereq_,module,exports){"use strict";function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}};module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){"use strict";exports.STORE={magic:"\x00\x00",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length){return 0}var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined"){crc=0}var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length=this.index;i--){result=(result<<8)+this.byteAt(i)}this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_,module,exports){"use strict";exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer=utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)};exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){"use strict";var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\b\x00";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{pako:24}],9:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data){this.load(data,options)}this.clone=function(){var newObj=new JSZip;for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i]}}return newObj}}JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64){data=base64.decode(data)}zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/"){name+="/"}createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders})}return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic){result.compressedContent=file._data.getCompressedContent()}else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file);if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir){dir=file.dir}else{dir=o.dir}if(file._initialMetadata.date!==file.date){date=file.date}else{date=o.date}dosTime=date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField=decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\x00";header+=useUTF8ForFileName||useUTF8ForComment?"\x00\b":"\x00\x00";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize,4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\x00"+header+decToHex(utfEncodedComment.length,2)+"\x00\x00"+"\x00\x00"+(dir===true?"\x00\x00\x00":"\x00\x00\x00\x00")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out={load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue}file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone)){result.push(fileClone)}}return result},file:function(name,data,o){if(arguments.length===1){if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&®exp.test(relativePath)})}else{return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null}}else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg){return this}if(utils.isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)})}var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/"){name+="/"}file=this.files[name]}if(file&&!file.dir){delete this.files[name]}else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i}}return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return new Uint8Array(0)}var result=this.data.subarray(this.index,this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}],20:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out)}else{utf16buf.length=out}}return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodeBuffer(str,"utf-8")}return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8")}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k1){try{if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))))}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))))}k+=chunk}catch(e){chunk=Math.floor(chunk/2)}}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i1){throw new Error("Multi-volumes zip are not supported")}},readLocalFiles:function(){var i,file;for(i=0;i0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){"use strict";var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scanbest_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead=MIN_MATCH){s.ins_h=(s.ins_h<=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<=MIN_MATCH){s.ins_h=(s.ins_h<4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scans.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){var bflush; for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits>>=op;bits-=op}if(bits<15){hold+=input[_in++]<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bitsdmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<>3;_in-=len;bits-=len<<3;hold&=(1<>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&©>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;lenENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;hmax_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code>=7;for(;code8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var XLSX={};(function(XLSX){XLSX.version="0.7.12";var current_codepage=1252,current_cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("./dist/cpexcel");current_cptable=cptable[current_codepage]}function reset_cp(){set_cp(1252)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){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}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];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"]];function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v,opts){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v,opts){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v,opts){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v,opts):general_fmt_num(v,opts)}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(date,o){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break}break;case 109:switch(fmt.length){case 1:case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2]}break;case 100:switch(fmt.length){case 1:case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1]}break;case 104:switch(fmt.length){case 1:case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 72:switch(fmt.length){case 1:case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 77:switch(fmt.length){case 1:case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt}break;case 115:if(val.u===0)switch(fmt){case"s":case"ss":return pad0(val.S,fmt.length);case".0":case".00":case".000":}switch(fmt){case"s":case"ss":case".0":case".00":case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt}case 90:switch(fmt){case"[h]":case"[hh]":out=val.D*24+val.H;break;case"[m]":case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4]),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;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))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc)}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){return Math.round((val-Math.floor(val))*Math.pow(10,d))}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt[1]==" "?2:1),val);var o,oo;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(pad0r(aval,0));if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+Math.floor(val))+"."+pad0(dec(val,r[1].length),r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt[1]==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(""+aval);if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i-1||c=="\\"&&fmt[i+1]=="-"&&"0#".indexOf(fmt[i+2])>-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt[++i]===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt[i]==" "||fmt[i]=="*")++i;break;case"(":case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=c;while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":case"y":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":if(out[i].v==="B2");break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break}var nstr="",jj;for(i=0;i-1||out[jj].v===" "&&out[jj+1]!=null&&out[jj+1].t=="?"))){out[i].v+=out[jj].v;out[jj]=undefined;++jj}nstr+=out[i].v;i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}var vv="",myv,ostr;if(nstr.length>0){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num(nstr.charCodeAt(0)===40?"(":"n",nstr,myv);jj=ostr.length-1;var decpt=out.length;for(i=0;i-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v[j]==="0"||out[i].v[j]==="#"))vv=ostr[jj--]+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw"cannot find right format for |"+fmt+"|";if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){fixopts(o!=null?o:o=[]);var sfmt="";switch(typeof fmt){case"string":sfmt=fmt;break;case"number":sfmt=(o.table!=null?o.table:table_fmt)[fmt];break}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)}};make_ssf(SSF);function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){if(date1904)v+=1462;var epoch=Date.parse(v);return(epoch+22091616e5)/(24*60*60*1e3)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}var has_buf=typeof Buffer!=="undefined";function getdata(data){if(!data)return null;if(data.name.substr(-4)===".bin"){if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent)return Array.prototype.slice.call(data._data.getContent())}else{if(data.data)return data.name.substr(-4)!==".bin"?debom_xml(data.data):char_codes(data.data);if(data.asNodeBuffer&&has_buf)return debom_xml(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom_xml(data.asBinary());if(data._data&&data._data.getContent)return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)))}return null}function safegetzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];f=file.toLowerCase();if(zip.files[f])return zip.files[f];f=f.replace(/\//g,"\\");if(zip.files[f])return zip.files[f];return null}function getzipfile(zip,file){var o=safegetzipfile(zip,file);if(o==null)throw new Error("Cannot find file "+file+" in zip");return o}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(has_buf&&typeof jszip==="undefined")jszip=require("js"+"zip");if(typeof jszip==="undefined")jszip=require("./js"+"zip").JSZip;_fs=require("f"+"s")}}var attregexg=/\b[\w:]+=["'][^"]*['"]/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z=[];var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,w="",v="",i=0,q="",cc="";if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);v=cc.substring(c+2,cc.length-1);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length)z[q]=v;else z[(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)]=v}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={""":'"',"'":"'",">":">","<":"<","&":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");var encregex=/&[a-z]*;/g,coderegex=/_x([\da-fA-F]+)_/g;function unescapexml(text){var s=text+"";return s.replace(encregex,function($$){return encodings[$$]}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).substr(-4)+"_"})}function parsexmlbool(value,tag){switch(value){case"1":case"true":case"TRUE":return true;default:return false}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}out.length=k;return out.toString("ucs2")};var corpus="foo bar baz☃🍣";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+g;if(mtcache[t]!==undefined)return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^☃]*)",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("(.*?)","g")}}();var vtvregex=/<\/?vt:variant>/g,vtmregex=/]*)>(.*)"+g+""}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+""}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false")}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};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"];function readIEEE754(buf,idx,isLE,nl,ml){if(isLE===undefined)isLE=true;if(!nl)nl=8;if(!ml&&nl===8)ml=52;var e,m,el=nl*8-ml-1,eMax=(1<>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};function ReadShift(size,t){var o="",oo=[],w,vv,i,loc;if(t==="dbcs"){loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2}else switch(size){case 1:o=__readUInt8(this,this.l);break;case 2:o=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);break;case 4:o=__readUInt32LE(this,this.l);break;case 8:if(t==="f"){o=__double(this,this.l);break}}this.l+=size;return o}function WriteShift(t,val,f){var size,i;if(f==="dbcs"){for(i=0;i!=val.length;++i)this.writeUInt16LE(val.charCodeAt(i),this.l+2*i);size=2*val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 3:size=3;this[this.l+2]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l]=val&255;break;case 4:size=4;this.writeUInt32LE(val,this.l);break;case 8:size=8;if(f==="f"){this.writeDoubleLE(val,this.l);break}case 16:break;case-4:size=4;this.writeInt32LE(val,this.l);break}this.l+=size;return this}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=has_buf?new Buffer(sz):new Array(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(sz=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r=""+escapexml(str)+"";if((flags&2)!==0){}data.l=start+length;return z}function write_RichStr(str,o){if(o==null)o=new_buf(5+2*str.t.length);o.write_shift(1,0);write_XLWideString(str.t,o);return o}function parse_Cell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_Cell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef===undefined?cell.iStyleRef:cell.s);o.write_shift(1,0);return o}function parse_CodeName(data,length){return parse_XLWideString(data,length)}function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return o}function parse_XLWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift(cchCharacters,"dbcs")}function write_XLWideString(data,o){if(o==null)o=new_buf(4+2*data.length);o.write_shift(4,data.length);if(data.length>0)o.write_shift(0,data,"dbcs");return o}var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function parse_UncheckedRfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_UncheckedRfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,"f",data)}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);out.fValidRGB=d&1;out.xColorType=d>>>1;out.index=data.read_shift(1);out.nTintAndShade=data.read_shift(2,"i");out.bRed=data.read_shift(1);out.bGreen=data.read_shift(1);out.bBlue=data.read_shift(1);out.bAlpha=data.read_shift(1)}function parse_FontFlags(data,length){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.chartsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"TODO","application/vnd.ms-excel.dialogsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"TODO","application/vnd.ms-excel.macrosheet":"TODO","application/vnd.ms-excel.macrosheet+xml":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.ms-excel.comments":"comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ctext={};if(!data||!data.match)return data;var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){ct[w].forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"};function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(tagregex).forEach(function(x){var y=parsexmltag(x);if(y[0]==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}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"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i]*>(.*)")}return r}();function parse_core_props(data){var p={};for(var i=0;i0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=new Date(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,opts){var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(!cp)return o.join("");if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];cp_doit(f[0],cp[f[1]],null,o,p)}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}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"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)"));if(cur&&cur.length>0)q[f[1]]=cur[1];break}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=cp[f[1]];break;case"bool":v=cp[f[1]]?"true":"false";break}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","Worksheets")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return""+s+""}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name;var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"":name=null;break;default:if(x.indexOf("");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=new Date(text);break;case"cy":case"error":p[name]=unescapexml(text);break;default:if(typeof console!=="undefined")console.warn("Unexpected",x,type,toks)}}else if(x.substr(0,2)==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=//g,rend=/<\/r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001;var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0]){case"":break;case"":break;case"":font.strike=1;break;case"":break;case"":font.u=1;break;case"":break;case"":font.b=1;break;case"":break;case"":font.i=1;break;case"":break;case"');outro.push("");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"
")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/]*>([^<]*)<\/t>/g,sirregex=//;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.charCodeAt(1)===116){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));z.r=x;if(html)z.h=z.t}else if(y=x.match(sirregex)){z.r=x;z.t=utf8read(unescapexml(x.match(sitregex).join("").replace(tagregex,"")));if(html)z.h=parse_rs(x)}return z}var sstr0=/]*)>([\s\S]*)<\/sst>/;var sstr1=/<(?:si|sstItem)>/g;var sstr2=/<\/(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i],opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="";if(s.r)sitag+=s.r;else{sitag+=""}sitag+="";o[o.length]=sitag}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R,RT){switch(R.n){case"BrtBeginSst":s.Count=val[0];s.Unique=val[1];break;case"BrtSSTItem":s.push(val);break;case"BrtEndSst":return true;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint===0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);return rgb2Hex(hsl2RGB(hsl))}var DEF_MDW=7,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return(width+(128/MDW|0)/256)*MDW|0}function px2char(px){return((px-5)/MDW*100+.5|0)/100}function char2width(chr){return((chr*MDW+5)/MDW*256|0)/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw(collw,coll){if(cycle_width(collw)!=collw){for(MDW=DEF_MDW;MDW>MIN_MDW;--MDW)if(cycle_width(collw)===collw)break;if(MDW===MIN_MDW)for(MDW=DEF_MDW+1;MDW":case"":break;case"":break;case"":styles.Fills.push(fill);fill={};break;case"":case"":break;case"":case"":break;case"":case"":break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in fills"}})}function parse_numFmts(t,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i":case"":case"":break;case"0)SSF.load(f,j)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in numFmts"}}}function write_numFmts(NF,opts){var o=[""];[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!==undefined)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}function parse_cellXfs(t,opts){styles.CellXf=[];t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":case"":case"":break;case"":break;case"":break;case"":case"":break;case"":break;case"";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/]*)>.*<\/numFmts>/;var cellXfRegex=/]*)>.*<\/cellXfs>/;var fillsRegex=/]*)>.*<\/fills>/;return function parse_sty_xml(data,opts){var t;if(t=data.match(numFmtRegex))parse_numFmts(t,opts);if(t=data.match(fillsRegex))parse_fills(t,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){var o=[XML_HEADER,STYLES_XML_ROOT],w;if((w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function parse_BrtFont(data,length){var out={flags:{}};out.dyHeight=data.read_shift(2);out.grbit=parse_FontFlags(data,2);out.bls=data.read_shift(2);out.sss=data.read_shift(2);out.uls=data.read_shift(1);out.bFamily=data.read_shift(1);out.bCharSet=data.read_shift(1);data.l++;out.brtColor=parse_BrtColor(data,8);out.bFontScheme=data.read_shift(1);out.name=parse_XLWideString(data,length-21);out.flags.Bold=out.bls===700;out.flags.Italic=out.grbit.fItalic;out.flags.Strikeout=out.grbit.fStrikeout;out.flags.Outline=out.grbit.fOutline;out.flags.Shadow=out.grbit.fShadow;out.flags.Condense=out.grbit.fCondense;out.flags.Extend=out.grbit.fExtend;out.flags.Sub=out.sss&2;out.flags.Sup=out.sss&1;return out}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function parse_sty_bin(data,opts){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];var state="";var pass=false;recordhopper(data,function hopper_sty(val,R,RT){switch(R.n){case"BrtFmt":styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case"BrtFont":break;case"BrtKnownFonts":break;case"BrtFill":break;case"BrtBorder":break;case"BrtXF":if(state==="CELLXFS"){styles.CellXf.push(val)}break;case"BrtStyle":break;case"BrtDXF":break;case"BrtMRUColor":break;case"BrtIndexedColor":break;case"BrtBeginStyleSheet":break;case"BrtEndStyleSheet":break;case"BrtBeginTableStyle":break;case"BrtTableStyleElement":break;case"BrtEndTableStyle":break;case"BrtBeginFmts":state="FMTS";break;case"BrtEndFmts":state="";break;case"BrtBeginFonts":state="FONTS";break;case"BrtEndFonts":state="";break;case"BrtACBegin":state="ACFONTS";break;case"BrtACEnd":state="";break;case"BrtBeginFills":state="FILLS";break;case"BrtEndFills":state="";break;case"BrtBeginBorders":state="BORDERS";break;case"BrtEndBorders":state="";break;case"BrtBeginCellStyleXFs":state="CELLSTYLEXFS";break;case"BrtEndCellStyleXFs":state="";break;case"BrtBeginCellXFs":state="CELLXFS";break;case"BrtEndCellXFs":state="";break;case"BrtBeginStyles":state="STYLES";break;case"BrtEndStyles":state="";break;case"BrtBeginDXFs":state="DXFS";break;case"BrtEndDXFs":state="";break;case"BrtBeginTableStyles":state="TABLESTYLES";break;case"BrtEndTableStyles":state="";break;case"BrtBeginColorPalette":state="COLORPALETTE";break;case"BrtEndColorPalette":state="";break;case"BrtBeginIndexedColors":state="INDEXEDCOLORS";break;case"BrtEndIndexedColors":state="";break;case"BrtBeginMRUColors":state="MRUCOLORS";break;case"BrtEndMRUColors":state="";break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtBeginStyleSheetExt14":break;case"BrtBeginSlicerStyles":break;case"BrtEndSlicerStyles":break;case"BrtBeginTimelineStylesheetExt15":break;case"BrtEndTimelineStylesheetExt15":break;case"BrtBeginTimelineStyles":break;case"BrtEndTimelineStyles":break;case"BrtEndStyleSheetExt14":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return styles}function write_sty_bin(data,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,opts){themes.themeElements.clrScheme=[];var color={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":if(y[0][1]==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts.WTF)throw"unrecognized "+y[0]+" in clrScheme"}})}function parse_fontScheme(t,opts){}function parse_fmtScheme(t,opts){}var clrsregex=/]*)>[^\u2603]*<\/a:clrScheme>/;var fntsregex=/]*)>[^\u2603]*<\/a:fontScheme>/;var fmtsregex=/]*)>[^\u2603]*<\/a:fmtScheme>/;function parse_themeElements(data,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw m[0]+" not found in themeElements";m[2](t,opts)})}var themeltregex=/]*)>[^\u2603]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return themes;var t;if(!(t=data.match(themeltregex)))throw"themeElements not found in theme";parse_themeElements(t[0],opts);return themes}function write_theme(){return'\n'}function parse_cc_xml(data,opts){var d=[];var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":case"":break;case"thisCell.r)range.s.r=thisCell.r;if(range.e.rthisCell.c)range.s.c=thisCell.c;if(range.e.c/))return[];var authors=[];var commentList=[];data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/)[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;authors.push(x.match(/<(?:\w+:)?author[^>]*>(.*)/)[1])});(data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/)||["",""])[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var y=parsexmltag(x.match(/<(?:\w+:)?comment[^>]*>/)[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:undefined,ref:y.ref,guid:y.guid}; -var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/([^\u2603]*)<\/text>/);if(!textMatch||!textMatch[1])return;var rt=parse_si(textMatch[1]);comment.r=rt.r;comment.t=rt.t;if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}function write_comments_xml(data,opts){}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}var parse_BrtCommentAuthor=parse_XLWideString;var parse_BrtCommentText=parse_RichStr;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R,RT){switch(R.n){case"BrtCommentAuthor":authors.push(val);break;case"BrtBeginComment":c=val;break;case"BrtCommentText":c.t=val.t;c.h=val.h;c.r=val.r;break;case"BrtEndComment":c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;delete c.rfx;out.push(c);break;case"BrtBeginComments":break;case"BrtEndComments":break;case"BrtBeginCommentAuthors":break;case"BrtEndCommentAuthors":break;case"BrtBeginCommentList":break;case"BrtEndCommentList":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R.n)}});return out}function write_comments_bin(data,opts){}function parse_CellParsedFormula(data,length){var cce=data.read_shift(4);return parsenoop(data,length-4)}var strs={};var _ssfopts={};RELS.WS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";function get_sst_id(sst,str){for(var i=0,len=sst.length;i=0&&d.s.c>=0)ws["!ref"]=encode_range(d)}var mergecregex=//g;var sheetdataregex=/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/]*\/>/g;var dimregex=/"(\w*:\w*)"/;var colregex=/]*\/>/g;function parse_ws_xml(data,opts,rels){if(!data)return data;var s={};var ridx=data.indexOf("0){var ref=data.substr(ridx,50).match(dimregex);if(ref!=null)parse_ws_xml_dim(s,ref[1])}var mergecells=[];if(data.indexOf("")!==-1){var merges=data.match(mergecregex);for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1))}var columns=[];if(opts.cellStyles&&data.indexOf("")!==-1){var cols=data.match(colregex);parse_ws_xml_cols(columns,cols)}var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var mtch=data.match(sheetdataregex);if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess);if(data.indexOf("")!==-1)parse_ws_xml_hlinks(s,data.match(hlinkregex),rels);if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!merges"]=mergecells;if(columns.length>0)s["!cols"]=columns;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='';for(var i=0;i!=merges.length;++i)o+='';return o+""}function parse_ws_xml_hlinks(s,data,rels){for(var i=0;i!=data.length;++i){var val=parsexmltag(data[i],true);if(!val.ref)return;var rel=rels["!id"][val.id];if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(!s[addr])s[addr]={t:"stub",v:undefined};s[addr].l=val}}}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;if(!seencol&&coll.width){seencol=true;find_mdw(+coll.width,coll)}if(coll.width){coll.wpx=width2px(+coll.width);coll.wch=px2char(coll.wpx);coll.MDW=MDW}while(colm<=colM)columns[colm++]=coll}}function write_ws_xml_cols(ws,cols){var o=[""],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;var p={min:i+1,max:i+1};width=-1;if(col.wpx)width=px2char(col.wpx);else if(col.wch)width=col.wch;if(width>-1){p.width=char2width(width);p.customWidth=1}o[o.length]=writextag("col",null,p)}o[o.length]="";return o.join("")}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined)return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=new Date(cell.v).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(cell.v));if(typeof cell.z==="undefined")cell.z=SSF._table[14]}break;default:vv=cell.v;break}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/([\S\s]*?)<\/is>/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr;var fmtid=0,fillid=0,do_format=Array.isArray(styles.CellXf),cf;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ritagr-1)guess.s.r=tagr-1;if(guess.e.r":"")+x;if(cref!==null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=utils.encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!==null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula&&(cref=d.match(match_f))!==null)p.f=unescapexml(cref[1]);if(tag.t===undefined&&p.v===undefined){if(!opts.sheetStubs)continue;p.t="stub"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c0)o[o.length]=writextag("row",r.join(""),{r:rr})}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws===undefined)ws={};var ref=ws["!ref"];if(ref===undefined)ref="A1";o[o.length]=writextag("dimension",null,{ref:ref});if(ws["!cols"]!==undefined&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="";if(ws["!ref"]!==undefined){rdata=write_ws_xml_data(ws,opts,idx,wb);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="";o[sidx]=o[sidx].replace("/>",">")}if(ws["!merges"]!==undefined&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtRowHdr(data,length){var z=[];z.r=data.read_shift(4);data.l+=length-4;return z}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_CodeName(data,length-19);return z}function parse_BrtCellBlank(data,length){var cell=parse_Cell(data);return[cell]}function write_BrtCellBlank(cell,val,o){if(o==null)o=new_buf(8);return write_Cell(val,o)}function parse_BrtCellBool(data,length){var cell=parse_Cell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function parse_BrtCellError(data,length){var cell=parse_Cell(data);var fBool=data.read_shift(1);return[cell,fBool,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_Cell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function parse_BrtCellReal(data,length){var cell=parse_Cell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function parse_BrtCellRk(data,length){var cell=parse_Cell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function parse_BrtCellSt(data,length){var cell=parse_Cell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function parse_BrtFmlaBool(data,length,opts){var cell=parse_Cell(data);var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaError(data,length,opts){var cell=parse_Cell(data);var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o}function parse_BrtFmlaNum(data,length,opts){var cell=parse_Cell(data);var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-16);o[3]=""}else data.l+=length-16;return o}function parse_BrtFmlaString(data,length,opts){var start=data.l;var cell=parse_Cell(data);var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,start+length-data.l)}else data.l=start+length;return o}var parse_BrtMergeCell=parse_UncheckedRfX;function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,tooltip:tooltip,display:display}}function parse_ws_bin(data,opts,rels){if(!data)return data;if(!rels)rels={"!id":{}};var s={};var ref;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr;var mergecells=[];recordhopper(data,function ws_parse(val,R){if(end)return;switch(R.n){case"BrtWsDim":ref=val;break;case"BrtRowHdr":row=val;if(opts.sheetRows&&opts.sheetRows<=row.r)end=true;rr=encode_row(row.r);break;case"BrtFmlaBool":case"BrtFmlaError":case"BrtFmlaNum":case"BrtFmlaString":case"BrtCellBool":case"BrtCellError":case"BrtCellIsst":case"BrtCellReal":case"BrtCellRk":case"BrtCellSt":p={t:val[2]};switch(val[2]){case"n":p.v=val[1];break;case"s":sstr=strs[val[1]];p.v=sstr.t;p.r=sstr.r;break;case"b":p.v=val[1]?true:false;break;case"e":p.v=val[1];p.w=BErr[p.v];break;case"str":p.t="s";p.v=utf8read(val[1]);break}if(opts.cellFormula&&val.length>3)p.f=val[3];if(cf=styles.CellXf[val[0].iStyleRef])safe_format(p,cf.ifmt,null,opts);s[encode_col(C=val[0].c)+rr]=p;if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.rrow.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r0||ref.e.c>0||ref.s.r>0||ref.s.c>0))s["!ref"]=encode_range(ref);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!merges"]=mergecells;return s}function write_ws_bin_cell(ba,cell,R,C,opts){if(cell.v===undefined)return"";var vv="";switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":case"e":vv=""+cell.v;break;default:vv=cell.v;break}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);switch(cell.t){case"s":case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";break}o.t="str";break;case"n":break;case"b":o.t="b";break;case"e":o.t="e";break}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;if(!ws[ref])continue;write_ws_bin_cell(ba,ws[ref],R,C,opts)}}write_record(ba,"BrtEndSheetData")}function write_ws_bin(idx,opts,wb){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_CELLTABLE(ba,ws,idx,opts,wb);write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery","0"],["autoCompressPictures","1"],["backupFile","0"],["checkCompatibility","0"],["codeName",""],["date1904","0"],["dateCompatibility","1"],["filterPrivacy","0"],["hidePivotFieldList","0"],["promptedSolutions","0"],["publishItems","0"],["refreshAllConnections",false],["saveExternalLinkValues","1"],["showBorderUnselectedTables","1"],["showInkAnnotation","1"],["showObjects","all"],["showPivotChartFilter","0"]];var WBViewDef=[["activeTab","0"],["autoFilterDateGrouping","1"],["firstSheet","0"],["minimized","0"],["showHorizontalScroll","1"],["showSheetTabs","1"],["showVerticalScroll","1"],["tabRatio","600"],["visibility","visible"]];var SheetDef=[["state","visible"]];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1]}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1]}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}var wbnsregex=/<\w+:workbook/;function parse_wb_xml(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,xmlns="xmlns";data.match(tagregex).forEach(function xml_wb(x){var y=parsexmltag(x);switch(strip_ns(y[0])){case"":break;case"":break;case"":break;case"":delete y[0];wb.WBProps=y;break;case"":break;case"":case"":break;case"":case"":break;case"":break;case"":case"":break;case"":break;case"":case"":pass=false;break;case"":case"":break;case"":delete y[0];wb.CalcPr=y;break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":break;case"":break;case"":case"":break;case"":case"":case"":break;case"":pass=false;break;case"":pass=false;break;default:if(!pass&&opts.WTF)throw"unrecognized "+y[0]+" in workbook"}});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){try{return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}catch(e){return"false"}}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb)});o[o.length]="";for(var i=0;i!=wb.SheetNames.length;++i)o[o.length]=writextag("sheet",null,{name:wb.SheetNames[i].substr(0,31),sheetId:""+(i+1),"r:id":"rId"+(i+1)});o[o.length]="";if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.hsState);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(8);o.write_shift(4,0);o.write_shift(4,0);return o}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function hopper_wb(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtWbFactoid":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFileSharing":break;case"BrtBeginSmartTagTypes":break;case"BrtSmartTagType":break;case"BrtEndSmartTagTypes":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTArchID$":break;case"BrtWorkBookPr15":break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}});parse_wb_defaults(wb);return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var d={hsState:0,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o}function write_BOOKVIEWS(ba,wb,opts){write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtCalcProp",write_BrtCalcProp());write_record(ba,"BrtFileRecover",write_BrtFileRecover());write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){return(name.substr(-4)===".bin"?parse_wb_bin:parse_wb_xml)(data,opts)}function parse_ws(data,name,opts,rels){return(name.substr(-4)===".bin"?parse_ws_bin:parse_ws_xml)(data,opts,rels)}function parse_sty(data,name,opts){return(name.substr(-4)===".bin"?parse_sty_bin:parse_sty_xml)(data,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){return(name.substr(-4)===".bin"?parse_sst_bin:parse_sst_xml)(data,opts)}function parse_cmnt(data,name,opts){return(name.substr(-4)===".bin"?parse_comments_bin:parse_comments_xml)(data,opts)}function parse_cc(data,name,opts){return(name.substr(-4)===".bin"?parse_cc_bin:parse_cc_xml)(data,opts)}function write_wb(wb,name,opts){return(name.substr(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb){return(name.substr(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb)}function write_sty(data,name,opts){return(name.substr(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.substr(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}var RecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}}; -var evert_RE=evert_key(RecordEnum,"n");function parse_ods(zip,opts){if(typeof module!=="undefined"&&typeof require!=="undefined"&&typeof ODS==="undefined")ODS=require("./dist/od"+"s");if(typeof ODS==="undefined"||!ODS.parse_ods)throw new Error("Unsupported ODS");return ODS.parse_ods(zip,opts)}function fix_opts_func(defaults){return function fix_opts(opts){for(var i=0;i!=defaults.length;++i){var d=defaults[i];if(opts[d[0]]===undefined)opts[d[0]]=d[1];if(d[2]==="n")opts[d[0]]=Number(opts[d[0]])}}}var fix_read_opts=fix_opts_func([["cellNF",false],["cellHTML",true],["cellFormula",true],["cellStyles",false],["cellDates",false],["sheetStubs",false],["sheetRows",0,"n"],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["bookVBA",false],["WTF",false]]);var fix_write_opts=fix_opts_func([["cellDates",false],["bookSST",false],["bookType","xlsx"],["WTF",false]]);function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){return[w.name,wbrels["!id"][w.id].Target]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_ws(zip,path,relsPath,sheet,sheetRels,sheets,opts){try{sheetRels[sheet]=parse_rels(getzipdata(zip,relsPath,true),path);sheets[sheet]=parse_ws(getzipdata(zip,path),path,opts,sheetRels[sheet])}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.substr(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipdata(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].substr(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,opts);themes={};if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipdata(zip,dir.themes[0].replace(/^\//,""),true),dir.themes[0],opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipdata(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipdata(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipdata(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){if(wbrels)path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_ws(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,opts)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0],true);else if(dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj}function write_zip(wb,opts){if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(!wb.Props)wb.Props={};wb.Props.SheetNames=wb.SheetNames;wb.Props.Worksheets=wb.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb));ct.sheets.push(f);add_rels(opts.wbrels,rId,"worksheets/sheet"+rId+"."+wbext,RELS.WS)}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,++rId,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme());ct.themes.push(f);add_rels(opts.wbrels,++rId,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,++rId,"styles."+wbext,RELS.STY);zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));return zip}function readSync(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;case"file":zip=new jszip(d=_fs.readFileSync(data));break;default:throw new Error("Unrecognized type "+o.type)}return parse_zip(zip,o)}function readFileSync(data,opts){var o=opts||{};o.type="file";return readSync(data,o)}function writeSync(wb,opts){var o=opts||{};var z=write_zip(wb,o);switch(o.type){case"base64":return z.generate({type:"base64"});case"binary":return z.generate({type:"string"});case"buffer":return z.generate({type:"nodebuffer"});case"file":return _fs.writeFileSync(o.file,z.generate({type:"nodebuffer"}));default:throw new Error("Unrecognized type "+o.type)}}function writeFileSync(wb,filename,opts){var o=opts||{};o.type="file";o.file=filename;switch(o.file.substr(-5).toLowerCase()){case".xlsm":o.bookType="xlsm";break;case".xlsb":o.bookType="xlsb";break}return writeSync(wb,o)}function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(ce===undefined||typeof ce==="number")return encode_range(cs.s,cs.e);if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){if(cell.z!==undefined)try{return cell.w=SSF.format(cell.z,v)}catch(e){}if(!cell.XF)return v;try{return cell.w=SSF.format(cell.XF.ifmt||0,v)}catch(e){return""+v}}function format_cell(cell,v){if(cell==null||cell.t==null)return"";if(cell.w!==undefined)return cell.w;if(v===undefined)return safe_format_cell(cell,cell.v);return safe_format_cell(cell,v)}function sheet_to_json(sheet,opts){var val,row,range,header=0,offset=1,r,hdr=[],isempty,R,C,v;var o=opts!=null?opts:{};var raw=o.raw;if(sheet==null||sheet["!ref"]==null)return[];range=o.range!==undefined?o.range:sheet["!ref"];if(o.header===1)header=1;else if(o.header==="A")header=2;else if(Array.isArray(o.header))header=3;switch(typeof range){case"string":r=safe_decode_range(range);break;case"number":r=safe_decode_range(sheet["!ref"]);r.s.r=range;break;default:r=range}if(header>0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0;for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val===undefined)continue;hdr[C]=format_cell(val)}}for(R=r.s.r+offset;R<=r.e.r;++R){rr=encode_row(R);isempty=true;row=header===1?[]:Object.create({__rowNum__:R});for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];if(val===undefined||val.t===undefined)continue;v=val.v;switch(val.t){case"e":continue;case"s":break;case"b":case"n":break;default:throw"unrecognized type "+val.t}if(v!==undefined){row[hdr[C]]=raw?v:format_cell(val,v);isempty=false}}if(isempty===false)out[outi++]=row}out.length=outi;return out}function sheet_to_row_object_array(sheet,opts){return sheet_to_json(sheet,opts!=null?opts:{})}function sheet_to_csv(sheet,opts){var out="",txt="",qreg=/"/g;var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var row="",rr="",cols=[];var i=0,cc=0,val;var R=0,C=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(R=r.s.r;R<=r.e.r;++R){row="";rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];txt=val!==undefined?""+format_cell(val):"";for(i=0,cc=0;i!==txt.length;++i)if((cc=txt.charCodeAt(i))===fs||cc===rs||cc===34){txt='"'+txt.replace(qreg,'""')+'"';break}row+=(C===r.s.c?"":FS)+txt}out+=row+RS}return out}var make_csv=sheet_to_csv;function sheet_to_formulae(sheet){var cmds,y="",x,val="";if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=sheet[y];val="";if(x===undefined)continue;if(x.f!=null)val=x.f;else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}var utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,format_cell:format_cell,get_formulae:sheet_to_formulae,make_csv:sheet_to_csv,make_json:sheet_to_json,make_formulae:sheet_to_formulae,sheet_to_csv:sheet_to_csv,sheet_to_json:sheet_to_json,sheet_to_formulae:sheet_to_formulae,sheet_to_row_object_array:sheet_to_row_object_array};XLSX.parseZip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.utils=utils;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX); -//# sourceMappingURL=dist/xlsx.core.min.map \ No newline at end of file +exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[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,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[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,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;lenENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;hmax_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code>=7;for(;code8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var XLSX={};(function make_xlsx(XLSX){XLSX.version="0.8.0";var current_codepage=1200,current_cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("./dist/cpexcel");current_cptable=cptable[current_codepage]}function reset_cp(){set_cp(1200)}var set_cp=function(cp){current_codepage=cp};function char_codes(data){var o=[];for(var i=0,len=data.length;i>8])[0]}}var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input,utf8){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input,utf8){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined";function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.8.1";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){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}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];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"]];function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v,opts){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v,opts){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v,opts){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v,opts):general_fmt_num(v,opts)}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(date,o){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break}break;case 109:switch(fmt.length){case 1:case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2]}break;case 100:switch(fmt.length){case 1:case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1]}break;case 104:switch(fmt.length){case 1:case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 72:switch(fmt.length){case 1:case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt}break;case 77:switch(fmt.length){case 1:case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt}break;case 115:if(val.u===0)switch(fmt){case"s":case"ss":return pad0(val.S,fmt.length);case".0":case".00":case".000":}switch(fmt){case"s":case"ss":case".0":case".00":case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt}case 90:switch(fmt){case"[h]":case"[hh]":out=val.D*24+val.H;break;case"[m]":case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(Math.abs(val))*Math.LOG10E);if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4]),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;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))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc)}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){return Math.round((val-Math.floor(val))*Math.pow(10,d))}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt[1]==" "?2:1),val);var o,oo;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(pad0r(aval,0));if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_flt(type,fmt,-val):commaify(""+Math.floor(val))+"."+pad0(dec(val,r[1].length),r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt[1]==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if((r=fmt.match(frac1))!==null)return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/)!==null)return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if((r=fmt.match(dec1))!==null){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".") +}fmt=fmt.replace(/^#+([0.])/,"$1");if((r=fmt.match(/^(0*)\.(#*)$/))!==null){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if((r=fmt.match(/^#,##0(\.?)$/))!==null)return sign+commaify(""+aval);if((r=fmt.match(/^#,##0\.([#0]*0)$/))!==null){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if((r=fmt.match(/^#,#*,#0/))!==null)return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if((r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/))!==null){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i-1||c=="\\"&&fmt[i+1]=="-"&&"0#".indexOf(fmt[i+2])>-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt[++i]===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt[i]==" "||fmt[i]=="*")++i;break;case"(":case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=c;while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":case"y":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":if(out[i].v==="B2");break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break}var nstr="",jj;for(i=0;i-1||out[jj].v===" "&&out[jj+1]!=null&&out[jj+1].t=="?"))){out[i].v+=out[jj].v;out[jj]=undefined;++jj}nstr+=out[i].v;i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}var vv="",myv,ostr;if(nstr.length>0){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num(nstr.charCodeAt(0)===40?"(":"n",nstr,myv);jj=ostr.length-1;var decpt=out.length;for(i=0;i-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v[j]==="0"||out[i].v[j]==="#"))vv=ostr[jj--]+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw"cannot find right format for |"+fmt+"|";if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){fixopts(o!=null?o:o=[]);var sfmt="";switch(typeof fmt){case"string":sfmt=fmt;break;case"number":sfmt=(o.table!=null?o.table:table_fmt)[fmt];break}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)}};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.10.2";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw"Major Version: Expected 3 or 4 saw "+mver}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw"# Directory Sectors: Expected 0 saw "+nds;blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.chk("feff","Byte Order: ");switch(shift=blob.read_shift(2)){case 9:if(mver!==3)throw"MajorVersion/SectorShift Mismatch";break;case 12:if(mver!==4)throw"MajorVersion/SectorShift Mismatch";break;default:throw"Sector Shift: Expected 9 or 12 saw "+shift}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i>>2)-1;for(var i=0;i=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw"FAT boundary crossed: "+j+" 4 "+ssz;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs");return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options)}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){if(date1904)v+=1462;var epoch=Date.parse(v);return(epoch+22091616e5)/(24*60*60*1e3)}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function getdata(data){if(!data)return null;if(data.name.substr(-4)===".bin"){if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent)return Array.prototype.slice.call(data._data.getContent())}else{if(data.data)return data.name.substr(-4)!==".bin"?debom_xml(data.data):char_codes(data.data);if(data.asNodeBuffer&&has_buf)return debom_xml(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom_xml(data.asBinary());if(data._data&&data._data.getContent)return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)))}return null}function safegetzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];f=file.toLowerCase();if(zip.files[f])return zip.files[f];f=f.replace(/\//g,"\\");if(zip.files[f])return zip.files[f];return null}function getzipfile(zip,file){var o=safegetzipfile(zip,file);if(o==null)throw new Error("Cannot find file "+file+" in zip");return o}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(has_buf&&typeof jszip==="undefined")jszip=require("js"+"zip");if(typeof jszip==="undefined")jszip=require("./js"+"zip").JSZip;_fs=require("f"+"s")}}var attregexg=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z=[];var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,w="",v="",i=0,q="",cc="";if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);v=cc.substring(c+2,cc.length-1);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length)z[q]=v;else z[(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1)]=v}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={""":'"',"'":"'",">":">","<":"<","&":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");var unescapexml=function(){var encregex=/&[a-z]*;/g,coderegex=/_x([\da-fA-F]+)_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$){return encodings[$$]}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).substr(-4)+"_"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();function parsexmlbool(value,tag){switch(value){case"1":case"true":case"TRUE":return true;default:return false}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}out.length=k;return out.toString("ucs2")};var corpus="foo bar baz☃🍣";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+g;if(mtcache[t]!==undefined)return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^☃]*)",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("(.*?)","g")}}();var vtvregex=/<\/?vt:variant>/g,vtmregex=/]*)>(.*)"+g+""}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+""}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false")}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};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"];function readIEEE754(buf,idx,isLE,nl,ml){if(isLE===undefined)isLE=true;if(!nl)nl=8;if(!ml&&nl===8)ml=52;var e,m,el=nl*8-ml-1,eMax=(1<>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __double,___double;__double=___double=function(b,idx){return readIEEE754(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__utf8=function utf8_b(s,e){return this.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\x00")size+=2;break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4;return oR}break;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR}case 16:o=__hexlify(this,this.l,size);break}}this.l+=size;return o}function WriteShift(t,val,f){var size,i;if(f==="dbcs"){for(i=0;i!=val.length;++i)this.writeUInt16LE(val.charCodeAt(i),this.l+2*i);size=2*val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 3:size=3;this[this.l+2]=val&255;val>>>=8; +this[this.l+1]=val&255;val>>>=8;this[this.l]=val&255;break;case 4:size=4;this.writeUInt32LE(val,this.l);break;case 8:size=8;if(f==="f"){this.writeDoubleLE(val,this.l);break}case 16:break;case-4:size=4;this.writeInt32LE(val,this.l);break}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(sz=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt){if(tgt.s){if(cell.cRel)cell.c+=tgt.s.c;if(cell.rRel)cell.r+=tgt.s.r}else{cell.c+=tgt.c;cell.r+=tgt.r}cell.cRel=cell.rRel=0;while(cell.c>=256)cell.c-=256;while(cell.r>=65536)cell.r-=65536;return cell}function shift_range_xls(cell,range){cell.s=shift_cell_xls(cell.s,range.s);cell.e=shift_cell_xls(cell.e,range.s);return cell}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("cry"+"pto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};if(crypto){O.md5=function(hex){return crypto.createHash("md5").update(hex).digest("hex")}}else{O.md5=function(hex){throw"unimplemented"}}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r=""+escapexml(str)+"";if((flags&2)!==0){}data.l=start+length;return z}function write_RichStr(str,o){if(o==null)o=new_buf(5+2*str.t.length);o.write_shift(1,0);write_XLWideString(str.t,o);return o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef===undefined?cell.iStyleRef:cell.s);o.write_shift(1,0);return o}function parse_XLSBCodeName(data,length){return parse_XLWideString(data,length)}function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return o}function parse_XLWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift(cchCharacters,"dbcs")}function write_XLWideString(data,o){if(o==null)o=new_buf(4+2*data.length);o.write_shift(4,data.length);if(data.length>0)o.write_shift(0,data,"dbcs");return o}var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function parse_UncheckedRfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_UncheckedRfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,"f",data)}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);out.fValidRGB=d&1;out.xColorType=d>>>1;out.index=data.read_shift(1);out.nTintAndShade=data.read_shift(2,"i");out.bRed=data.read_shift(1);out.bGreen=data.read_shift(1);out.bBlue=data.read_shift(1);out.bAlpha=data.read_shift(1)}function parse_FontFlags(data,length){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}{var VT_EMPTY=0;var VT_NULL=1;var VT_I2=2;var VT_I4=3;var VT_R4=4;var VT_R8=5;var VT_CY=6;var VT_DATE=7;var VT_BSTR=8;var VT_ERROR=10;var VT_BOOL=11;var VT_VARIANT=12;var VT_DECIMAL=14;var VT_I1=16;var VT_UI1=17;var VT_UI2=18;var VT_UI4=19;var VT_I8=20;var VT_UI8=21;var VT_INT=22;var VT_UINT=23;var VT_LPSTR=30;var VT_LPWSTR=31;var VT_FILETIME=64;var VT_BLOB=65;var VT_STREAM=66;var VT_STORAGE=67;var VT_STREAMED_Object=68;var VT_STORED_Object=69;var VT_BLOB_Object=70;var VT_CF=71;var VT_CLSID=72;var VT_VERSIONED_STREAM=73;var VT_VECTOR=4096;var VT_ARRAY=8192;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.chartsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"TODO","application/vnd.ms-excel.dialogsheet":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"TODO","application/vnd.ms-excel.macrosheet":"TODO","application/vnd.ms-excel.macrosheet+xml":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.ms-excel.comments":"comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ctext={};if(!data||!data.match)return data;var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){ct[w].forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument"};function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(tagregex).forEach(function(x){var y=parsexmltag(x);if(y[0]==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}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"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i]*>(.*)")}return r}();function parse_core_props(data){var p={};for(var i=0;i0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=new Date(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,opts){var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(!cp)return o.join("");if(cp.CreatedDate!=null)cp_doit("dcterms:created",typeof cp.CreatedDate==="string"?cp.CreatedDate:write_w3cdtf(cp.CreatedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);if(cp.ModifiedDate!=null)cp_doit("dcterms:modified",typeof cp.ModifiedDate==="string"?cp.ModifiedDate:write_w3cdtf(cp.ModifiedDate,opts.WTF),{"xsi:type":"dcterms:W3CDTF"},o,p);for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];cp_doit(f[0],cp[f[1]],null,o,p)}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}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"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)"));if(cur&&cur.length>0)q[f[1]]=cur[1];break}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=cp[f[1]];break;case"bool":v=cp[f[1]]?"true":"false";break}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","Worksheets")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return""+s+""}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name;var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"":name=null;break;default:if(x.indexOf("");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=new Date(text);break;case"cy":case"error":p[name]=unescapexml(text);break;default:if(typeof console!=="undefined")console.warn("Unexpected",x,type,toks)}}else if(x.substr(0,2)==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function xlml_set_prop(Props,tag,val){switch(tag){case"Description":tag="Comments";break}Props[tag]=val}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if(size&3>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t,4).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t)}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj;for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 1e4:case 1252:case 874:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 932:case 936:case 949:case 950:case 1200:case 1201:case 65e3:case-536:case 65001:case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n])}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=new Date(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l])}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw"Unrecognized #Sets: "+NumSets;FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw"Length mismatch";else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw"Length mismatch 2: "+blob.l+" !== "+Offset1;var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l=8)current_codepage=1200;if(opts===undefined||opts.biff!==5){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"}}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw=""+z.t+"";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts!==undefined&&opts.biff>0&&opts.biff<8?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff!==5&&opts.biff!==2)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob,length){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw"unsupported moniker "+clsid}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function parse_LongRGBA(blob,length){var r=blob.read_shift(1),g=blob.read_shift(1),b=blob.read_shift(1),a=blob.read_shift(1);return[r,g,b,a]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var HIDEOBJENUM=["SHOWALL","SHOWPLACEHOLDER","HIDEALL"];var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw"Malformed AddinUdf: padding = "+l+" != "+cb;blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}var FtTab={21:parse_FtCmo,19:parsenoop,18:function(blob,length){blob.l+=12},17:function(blob,length){blob.l+=8},16:parsenoop,15:parsenoop,13:parse_FtNts,12:function(blob,length){blob.l+=24},11:function(blob,length){blob.l+=10},10:function(blob,length){blob.l+=16},9:parsenoop,8:function(blob,length){blob.l+=6},7:parse_FtCf,6:function(blob,length){blob.l+=6},4:parsenoop,0:function(blob,length){blob.l+=4}};function parse_FtArray(blob,length,ot){var s=blob.l;var fts=[];while(blob.l":case"":break;case"":pass=false;break;case"":pass=false;break;default:if(!pass&&opts.WTF)throw"unrecognized "+y[0]+" in workbook"}});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){try{return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}catch(e){return"false"}}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb)});o[o.length]="";for(var i=0;i!=wb.SheetNames.length;++i)o[o.length]=writextag("sheet",null,{name:wb.SheetNames[i].substr(0,31),sheetId:""+(i+1),"r:id":"rId"+(i+1)});o[o.length]="";if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.hsState);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(8);o.write_shift(4,0);o.write_shift(4,0);return o}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function hopper_wb(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtWbFactoid":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFileSharing":break;case"BrtBeginSmartTagTypes":break;case"BrtSmartTagType":break;case"BrtEndSmartTagTypes":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTArchID$":break;case"BrtWorkBookPr15":break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break;default:if(!pass||opts.WTF)throw new Error("Unexpected record "+R.n)}});parse_wb_defaults(wb);return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var d={hsState:0,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o}function write_BOOKVIEWS(ba,wb,opts){write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtCalcProp",write_BrtCalcProp());write_record(ba,"BrtFileRecover",write_BrtFileRecover());write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){return(name.substr(-4)===".bin"?parse_wb_bin:parse_wb_xml)(data,opts)}function parse_ws(data,name,opts,rels){return(name.substr(-4)===".bin"?parse_ws_bin:parse_ws_xml)(data,opts,rels)}function parse_sty(data,name,opts){return(name.substr(-4)===".bin"?parse_sty_bin:parse_sty_xml)(data,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){return(name.substr(-4)===".bin"?parse_sst_bin:parse_sst_xml)(data,opts)}function parse_cmnt(data,name,opts){return(name.substr(-4)===".bin"?parse_comments_bin:parse_comments_xml)(data,opts)}function parse_cc(data,name,opts){return(name.substr(-4)===".bin"?parse_cc_bin:parse_cc_xml)(data,opts)}function write_wb(wb,name,opts){return(name.substr(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb){return(name.substr(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb)}function write_sty(data,name,opts){return(name.substr(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.substr(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":val=parsexmlbool(val);break;case"i2":case"int":val=parseInt(val,10);break;case"r4":case"float":val=parseFloat(val);break;case"date":case"dateTime.tz":val=new Date(val);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw"bad custprop:"+cp[0]}Custprops[unescapexml(Rn[3])]=val}function safe_format_xlml(cell,nf,o){try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v);if(o.cellNF)cell.z=XLMLFormatMap[nf]||nf||"General"}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];if(sid===undefined&&row)sid=row.StyleID;if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?ss:cell.r;break;case"DateTime":cell.v=(Date.parse(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v>=1&&cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss);break}safe_format_xlml(cell,nf,o);if(o.cellFormula!=null&&cell.Formula){cell.f=rc_to_a1(unescapexml(cell.Formula),base);cell.Formula=undefined}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"}function xlml_clean_comment(comment){comment.t=comment.v;comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw"badf"}var xlmlregex=/<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/gm;function parse_xlml_xml(d,opts){var str=xlml_normalize(d);var Rn;var state=[],tmp;var sheets={},sheetnames=[],cursheet={},sheetname="";var table={},cell={},row={},dtag,didx;var c=0,r=0;var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty;xlmlregex.lastIndex=0;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined)cursheet[encode_col(c)+encode_row(r)]=cell;if(cell.HRef){cell.l={Target:cell.HRef,tooltip:cell.HRefScreenTip};cell.HRef=cell.HRefScreenTip=undefined}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}++c;if(cell.MergeAcross)c+=+cell.MergeAcross}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(crefguess.e.c)refguess.e.c=c;if(Rn[0].substr(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].substr(-2)==="/>"){if(rrefguess.e.r)refguess.e.r=r;if(Rn[0].substr(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;sheets[sheetname]=cursheet}else{refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=tmp.Name;cursheet={};mergecells=[]}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[]}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=xlml_parsexmltag(Rn[0]).Format||"General";break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);cstys[csty.Index-1||cstys.length]=csty;for(var i=0;i<+csty.Span;++i)cstys[cstys.length]=csty;break;case"NamedRange":break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":case"Title":case"Description":case"Created":case"Keywords":case"Subject":case"Category":case"Company":case"LastAuthor":case"LastSaved":case"LastPrinted":case"Version":case"Revision":case"TotalTime":case"HyperlinkBase":case"Manager":if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"Name":break;case"ComponentOptions":case"DocumentProperties":case"CustomDocumentProperties":case"OfficeDocumentSettings":case"PivotTable":case"PivotCache":case"Names":case"MapInfo":case"PageBreaks":case"QueryTable":case"DataValidation":case"AutoFilter":case"Sorting":case"Schema":case"data":case"ConditionalFormatting":case"SmartTagType":case"SmartTags":case"ExcelWorkbook":case"WorkbookOptions":case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false}break;case"ExcelWorkbook":switch(Rn[3]){case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break; +case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Date1904":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false}break;case"WorksheetOptions":switch(Rn[3]){case"Unsynced":break;case"Visible":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"Header":break;case"Footer":break;case"PageSetup":break;case"PageMargins":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false}break;case"PivotTable":case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false}break;case"Sorting":case"ConditionalFormatting":case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false}break;case"MapInfo":case"Schema":case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":case"element":case"complexType":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:seen=false}break;case"SmartTags":break;default:seen=false;break}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].substr(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|")}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":case"buffer":case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts)}}function write_xlml(wb,opts){}function parse_compobj(obj){var v={};var o=obj.content;var l=28,m;m=__lpstr(o,l);l+=4+__readUInt32LE(o,l);v.UserType=m;m=__readUInt32LE(o,l);l+=4;switch(m){case 0:break;case 4294967295:case 4294967294:l+=4;break;default:if(m>400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw"Unsupported Unicode Extension"}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":case"FilePass":case"FileLock":case"InterfaceHdr":case"RRDInfo":case"RRDHead":case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d)}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;jrange.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.sheetRows&&lastcell.r>=options.sheetRows)cell_valid=false;else out[last_cell]=line};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,wtf:false};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var supbooks=[[]];var sbc=0,sbci=0,sbcli=0;supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;var last_Rn="";var file_depth=0;opts.codepage=1200;set_cp(1200);while(blob.l0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out={}}break;case"BOF":{if(opts.biff!==8);else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out={};if(opts.biff===2){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}}}else cur_sheet=(Directory[s]||{name:""}).name;mergecells=[];objects=[]}break;case"Number":case"BIFF2NUM":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{switch(val.val){case"String":last_formula=val;break;case"Array Formula":throw"Array Formula unsupported";default:temp_val={v:val.val,ixfe:val.cell.ixfe,t:val.tt};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(val.formula,range,val.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}}break;case"String":{if(last_formula){last_formula.val=val;temp_val={v:last_formula.val,ixfe:last_formula.cell.ixfe,t:"s"};temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula)temp_val.f="="+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts);if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}}break;case"Array":{array_formulae.push(val)}break;case"ShrFmla":{if(!cell_valid)break;shared_formulae[encode_cell(last_formula.cell)]=val[0]}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Label":case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(temp_val.XF)safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l=val[1]}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC)if(out[encode_cell({c:rngC,r:rngR})])out[encode_cell({c:rngC,r:rngR})].l.tooltip=val[1]}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"NameCmt":break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"Setup":break;case"DefColWidth":break;case"GCW":break;case"LHRecord":break;case"ColInfo":break;case"Row":break;case"DBCell":break;case"MulBlank":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Blank":break;case"Country":country=val;break;case"RecalcId":break;case"DefaultRowHeight":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":break;case"DConn":break;case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":case"Window1":case"Window2":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(R.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":break;case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":break;case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"ImData":break;case"WebPub":case"AutoWebPub":case"RightMargin":case"LeftMargin":case"TopMargin":case"BottomMargin":case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;case"ExternCount":break;case"RString":break;case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;default:switch(R.n){case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n}}}}}else blob.l+=length}var sheetnamesraw=opts.biff===2?["Sheet1"]:Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;return wb}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.find){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else throw new Error("Cannot find Workbook stream")}if(cfb.find)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;WorkbookP.CompObjP=CompObjP;return WorkbookP}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}}; +var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},22:{n:"ExternCount",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parsenoop},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parsenoop},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},536:{n:"Name",f:parsenoop},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1030:{n:"Formula",f:parse_Formula},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},0:{}};function parse_ods(zip,opts){if(typeof module!=="undefined"&&typeof require!=="undefined"&&typeof ODS==="undefined")ODS=require("./od"+"s");if(typeof ODS==="undefined"||!ODS.parse_ods)throw new Error("Unsupported ODS");return ODS.parse_ods(zip,opts)}function fix_opts_func(defaults){return function fix_opts(opts){for(var i=0;i!=defaults.length;++i){var d=defaults[i];if(opts[d[0]]===undefined)opts[d[0]]=d[1];if(d[2]==="n")opts[d[0]]=Number(opts[d[0]])}}}var fix_read_opts=fix_opts_func([["cellNF",false],["cellHTML",true],["cellFormula",true],["cellStyles",false],["cellDates",false],["sheetStubs",false],["sheetRows",0,"n"],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["bookVBA",false],["password",""],["WTF",false]]);var fix_write_opts=fix_opts_func([["cellDates",false],["bookSST",false],["bookType","xlsx"],["WTF",false]]);function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){return[w.name,wbrels["!id"][w.id].Target]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_ws(zip,path,relsPath,sheet,sheetRels,sheets,opts){try{sheetRels[sheet]=parse_rels(getzipdata(zip,relsPath,true),path);sheets[sheet]=parse_ws(getzipdata(zip,path),path,opts,sheetRels[sheet])}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.substr(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipdata(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].substr(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,opts);themes={};if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipdata(zip,dir.themes[0].replace(/^\//,""),true),dir.themes[0],opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipdata(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipdata(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipdata(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){if(wbrels)path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_ws(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,opts)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0],true);else if(dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj}function write_zip(wb,opts){if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var ct={workbooks:[],sheets:[],calcchains:[],themes:[],styles:[],coreprops:[],extprops:[],custprops:[],strs:[],comments:[],vba:[],TODO:[],rels:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS);f="docProps/app.xml";if(!wb.Props)wb.Props={};wb.Props.SheetNames=wb.SheetNames;wb.Props.Worksheets=wb.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb));ct.sheets.push(f);add_rels(opts.wbrels,rId,"worksheets/sheet"+rId+"."+wbext,RELS.WS)}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,++rId,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme());ct.themes.push(f);add_rels(opts.wbrels,++rId,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,++rId,"styles."+wbext,RELS.STY);zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));return zip}function firstbyte(f,o){switch((o||{}).type||"base64"){case"buffer":return f[0];case"base64":return Base64.decode(f.substr(0,12)).charCodeAt(0);case"binary":return f.charCodeAt(0);case"array":return f[0];default:throw new Error("Unrecognized type "+o.type)}}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;case"file":zip=new jszip(d=_fs.readFileSync(data));break;default:throw new Error("Unrecognized type "+o.type)}return parse_zip(zip,o)}function readSync(data,opts){var zip,d=data,isfile=false,n;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){isfile=true;o.type="buffer";d=_fs.readFileSync(data)}switch(n=firstbyte(d,o)){case 208:if(isfile)o.type="file";return parse_xlscfb(CFB.read(data,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(data):data),o);case 60:return parse_xlml(d,o);case 80:if(isfile)o.type="file";return read_zip(data,opts);default:throw new Error("Unsupported file "+n)}}function readFileSync(data,opts){var o=opts||{};o.type="file";return readSync(data,o)}function write_zip_type(wb,opts){var o=opts||{};var z=write_zip(wb,o);switch(o.type){case"base64":return z.generate({type:"base64"});case"binary":return z.generate({type:"string"});case"buffer":return z.generate({type:"nodebuffer"});case"file":return _fs.writeFileSync(o.file,z.generate({type:"nodebuffer"}));default:throw new Error("Unrecognized type "+o.type)}}function writeSync(wb,opts){var o=opts||{};switch(o.bookType){case"xml":return write_xlml(wb,o);default:return write_zip_type(wb,o)}}function writeFileSync(wb,filename,opts){var o=opts||{};o.type="file";o.file=filename;switch(o.file.substr(-5).toLowerCase()){case".xlsx":o.bookType="xlsx";break;case".xlsm":o.bookType="xlsm";break;case".xlsb":o.bookType="xlsb";break;default:switch(o.file.substr(-4).toLowerCase()){case".xls":o.bookType="xls";break;case".xml":o.bookType="xml";break}}return writeSync(wb,o)}function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(ce===undefined||typeof ce==="number")return encode_range(cs.s,cs.e);if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){if(cell.z!==undefined)try{return cell.w=SSF.format(cell.z,v)}catch(e){}if(!cell.XF)return v;try{return cell.w=SSF.format(cell.XF.ifmt||0,v)}catch(e){return""+v}}function format_cell(cell,v){if(cell==null||cell.t==null)return"";if(cell.w!==undefined)return cell.w;if(v===undefined)return safe_format_cell(cell,cell.v);return safe_format_cell(cell,v)}function sheet_to_json(sheet,opts){var val,row,range,header=0,offset=1,r,hdr=[],isempty,R,C,v;var o=opts!=null?opts:{};var raw=o.raw;if(sheet==null||sheet["!ref"]==null)return[];range=o.range!==undefined?o.range:sheet["!ref"];if(o.header===1)header=1;else if(o.header==="A")header=2;else if(Array.isArray(o.header))header=3;switch(typeof range){case"string":r=safe_decode_range(range);break;case"number":r=safe_decode_range(sheet["!ref"]);r.s.r=range;break;default:r=range}if(header>0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0;for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val===undefined)continue;hdr[C]=format_cell(val)}}for(R=r.s.r+offset;R<=r.e.r;++R){rr=encode_row(R);isempty=true;if(header===1)row=[];else{row={};if(Object.defineProperty)Object.defineProperty(row,"__rowNum__",{value:R,enumerable:false});else row.__rowNum__=R}for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];if(val===undefined||val.t===undefined)continue;v=val.v;switch(val.t){case"e":continue;case"s":break;case"b":case"n":break;default:throw"unrecognized type "+val.t}if(v!==undefined){row[hdr[C]]=raw?v:format_cell(val,v);isempty=false}}if(isempty===false||header===1)out[outi++]=row}out.length=outi;return out}function sheet_to_row_object_array(sheet,opts){return sheet_to_json(sheet,opts!=null?opts:{})}function sheet_to_csv(sheet,opts){var out="",txt="",qreg=/"/g;var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var row="",rr="",cols=[];var i=0,cc=0,val;var R=0,C=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(R=r.s.r;R<=r.e.r;++R){row="";rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){val=sheet[cols[C]+rr];txt=val!==undefined?""+format_cell(val):"";for(i=0,cc=0;i!==txt.length;++i)if((cc=txt.charCodeAt(i))===fs||cc===rs||cc===34){txt='"'+txt.replace(qreg,'""')+'"';break}row+=(C===r.s.c?"":FS)+txt}out+=row+RS}return out}var make_csv=sheet_to_csv;function sheet_to_formulae(sheet){var cmds,y="",x,val="";if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=sheet[y];val="";if(x===undefined)continue;if(x.f!=null)val=x.f;else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}var utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,format_cell:format_cell,get_formulae:sheet_to_formulae,make_csv:sheet_to_csv,make_json:sheet_to_json,make_formulae:sheet_to_formulae,sheet_to_csv:sheet_to_csv,sheet_to_json:sheet_to_json,sheet_to_formulae:sheet_to_formulae,sheet_to_row_object_array:sheet_to_row_object_array};XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.utils=utils;XLSX.CFB=CFB;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX; diff --git a/dist/xlsx.core.min.map b/dist/xlsx.core.min.map index 61a96cf..d900dac 100644 --- a/dist/xlsx.core.min.map +++ b/dist/xlsx.core.min.map @@ -1 +1 @@ -{"version":3,"file":"dist/xlsx.core.min.js","sources":["jszip.js","xlsx.js"],"names":["e","exports","module","define","amd","f","window","global","self","JSZip","t","n","r","s","o","u","a","require","i","Error","call","length",1,"_dereq_","_keyStr","encode","input","utf8","output","chr1","chr2","chr3","enc1","enc2","enc3","enc4","charCodeAt","isNaN","charAt","decode","replace","indexOf","String","fromCharCode",2,"CompressedObject","this","compressedSize","uncompressedSize","crc32","compressionMethod","compressedContent","prototype","getContent","getCompressedContent",3,"STORE","magic","compress","content","uncompress","compressInputType","uncompressInputType","DEFLATE","./flate",4,"utils","table","crc","isArray","getTypeOf","x","y","b","iTop","./utils",5,"DataReader","data","index","checkOffset","offset","checkIndex","newIndex","setIndex","skip","byteAt","readInt","size","result","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","Date",6,"base64","binary","dir","createFolders","date","compression","comment",7,"string2binary","str","string2Uint8Array","uint8Array2String","array","string2Blob","buffer","arrayBuffer2Blob","outputType","checkSupport","type","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","isRegExp","object",8,"USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","pako","deflateRaw","inflateRaw",9,"options","files","root","load","clone","newObj","support","defaults","compressions","./base64","./compressions","./defaults","./deprecatedPublicUtils","./load","./object","./support",10,"ZipEntries","zipEntries","file","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","./zipEntries",11,"Buffer","encoding","test","isBuffer","undefined",12,"Uint8ArrayReader","NodeBufferReader","slice","./uint8ArrayReader",13,"signature","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","_data","copy","set","getBinaryData","nodebuffer","asBinary","dataToString","asUTF8","out","utf8decode","utf8encode","ZipObject","name","_initialMetadata","asText","asNodeBuffer","asUint8Array","asArrayBuffer","decToHex","dec","bytes","hex","extend","attr","arguments","hasOwnProperty","prepareFileAttrs","toUpperCase","fileAdd","dataType","parent","parentFolder","folderAdd","path","substring","lastSlash","lastIndexOf","generateCompressedObjectFrom","generateZipParts","compressedObject","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","dosTime","dosDate","extraFields","unicodePathExtraField","unicodeCommentExtraField","getHours","getMinutes","getSeconds","getFullYear","getMonth","getDate","header","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","stream","filter","search","filename","relativePath","fileClone","push","regexp","folder","arg","newFolder","ret","remove","kids","generate","zipData","localDirLength","centralDirLength","writer","compressionName","zipPart","dirEnd","CENTRAL_DIRECTORY_END","typeName","toLowerCase","append","zip","finalize","string","./compressedObject","./crc32","./nodeBuffer","./signature","./stringWriter","./uint8ArrayWriter","./utf8",14,"ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR",15,"StringReader","./dataReader",16,"join",17,"arraybuffer","ArrayBuffer","uint8array","blob","Blob","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","getBlob",18,"sig0","sig1","sig2","sig3","subarray",19,20,"_utf8len","Array","string2buf","buf","c","c2","m_pos","str_len","buf_len","utf8border","max","pos","buf2string","c_len","len","utf16buf","applyFromCharCode","toString","k","chunk","nextBoundary","Math","min",21,"identity","stringToArrayLike","arrayLikeToString","canUseApply","apply","resultStr","floor","arrayLikeToArrayLike","arrayFrom","arrayTo","transform","byteLength","inputType","Object","supported","res","code","method",22,"ZipEntry","jszipProto","loadOptions","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraDataSize","extraFieldId","extraFieldLength","extraFieldValue","id","value","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","./nodeBufferReader","./stringReader","./zipEntry",23,"isEncrypted","bitFlag","useUTF8","prepareCompressedContent","from","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","start","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField",24,"assign","deflate","inflate","constants","./lib/deflate","./lib/inflate","./lib/utils/common","./lib/zlib/constants",25,"zlib_deflate","strings","msg","zstream","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","Deflate","level","chunkSize","windowBits","memLevel","strategy","to","opt","raw","gzip","err","ended","chunks","strm","avail_out","status","deflateInit2","deflateSetHeader","mode","_mode","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","deflator","./utils/common","./utils/strings","./zlib/deflate.js","./zlib/messages","./zlib/zstream",26,"zlib_inflate","gzheader","Inflate","inflateInit2","inflateGetHeader","next_out_utf8","tail","utf8str","binstring2buf","arraySet","inflateEnd","inflator","ungzip","./zlib/constants","./zlib/gzheader","./zlib/inflate.js",27,"TYPED_OK","Int32Array","obj","sources","source","shift","TypeError","p","fnTyped","dest","src","src_offs","dest_offs","l","fnUntyped","concat","setTyped","on","Buf16","Buf32",28,"STR_APPLY_OK","STR_APPLY_UIA_OK","__","./common",29,"adler32","adler","s1","s2",30,"Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN",31,"makeTable","crcTable","end",32,"trees","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","zero","flush_pending","state","pending","pending_buf","pending_out","total_out","flush_block_only","last","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","match","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","m","more","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_stored","flush","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","deflateInit","old_flush","beg","val","text","hcrc","extra","time","os","level_flags","bstate","_tr_align","_tr_stored_block","deflateInfo","../utils/common","./adler32","./messages","./trees",33,"GZheader","xflags","extra_len","done",34,"BAD","TYPE","inflate_fast","_in","_out","dmax","wsize","whave","wnext","hold","bits","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","top","dolen","dodist","sane",35,"inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","ZSWAP32","q","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit","virgin","lenfix","distfix","fixedtables","sym","updatewindow","put","left","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","opts","order","inf_leave","inflateInfo","./inffast","./inftrees",36,"MAXBITS","lbase","lext","dbase","dext","lens_index","codes","table_index","curr","drop","used","huff","incr","fill","low","mask","base","base_index","count","offs","extra_index",37,"0","-1","-2","-3","-4","-5","-6",38,"STORED_BLOCK","STATIC_TREES","DYN_TREES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","w","send_bits","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","stree","h","xbits","overflow","gen_codes","next_code","tr_static_init","init_block","bi_windup","copy_block","smaller","_n2","_m2","pqdownheap","v","j","compress_block","ltree","dtree","lc","lx","build_tree","node","scan_tree","prevlen","curlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","send_all_trees","lcodes","dcodes","blcodes","detect_data_type","black_mask","static_init_done","stored_len","opt_lenb","static_lenb",39,"ZStream","XLSX","version","current_codepage","current_cptable","cptable","reset_cp","set_cp","cp","char_codes","debom_xml","substr","SSF","make_ssf","_strrev","pad0","d","pad_","rpad_","pad0r1","round","pad0r2","p2_32","pow","pad0r","isgeneral","opts_fmt","fixopts","table_fmt",40,45,46,47,48,49,56,65535,"days","months","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","general_fmt_int","_general_int","general_fmt_num","make_general_fmt_num","gnr1","gnr2","gnr4","gnr5","gnr6","gfn2","gfn5","toFixed","toPrecision","toExponential","gfn3","gfn4","V","log","abs","LOG10E","_general_num","general_fmt","_general","fix_hijri","parse_date_code","b2","dow","dout","T","H","M","S","date1904","setDate","getDay","write_date","fmt","ss0","ss","tt","outl","commaify","write_num","make_write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","aval","sign","den","parseInt","rr","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","flr","write_num_flt","ffmt","oo","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","_split","abstime","eval_fmt","flen","lst","dt","hr","bt","ssm","nstr","jj","vv","myv","ostr","decpt","lasti","retval","_eval","cfregex","cfregex2","chkcond","thresh","parseFloat","choose_fmt","lat","m1","m2","format","_table","load_entry","get_table","load_table","tbl","isval","keys","evert_key","key","K","evert","evert_num","evert_arr","datenum","epoch","parse","cc2str","arr","has_buf","getdata","safegetzipfile","getzipfile","getzipdata","safe","_fs","jszip","attregexg","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","z","eq","strip_ns","encodings",""","'",">","<","&","rencoding","rencstr","split","encregex","coderegex","unescapexml","decregex","charegex","escapexml","parsexmlbool","utf8read","utf8reada","orig","utf8readb","ww","corpus","utf8readc","matchtag","mtcache","g","RegExp","vtregex","vt_cache","vt_regex","vtvregex","vtmregex","parseVector","baseType","forEach","wtregex","writetag","wxt_helper","map","writextag","write_w3cdtf","toISOString","write_vt","XML_HEADER","XMLNS","dc","dcterms","dcmitype","mx","sjs","vt","xsi","xsd","main","readIEEE754","isLE","nl","ml","el","eMax","eBias","NaN","Infinity","__toBuffer","___toBuffer","toBuffer_","bufs","__double","___double","is_buf","is_buf_a","double_","readDoubleLE","is_buf_b","__readUInt8","__readUInt16LE","__readInt16LE","__readUInt32LE","__readInt32LE","ReadShift","loc","WriteShift","writeUInt16LE","writeUInt32LE","writeDoubleLE","writeInt32LE","prep_blob","read_shift","write_shift","parsenoop","writenoop","new_buf","sz","recordhopper","cb","tmpbyte","cntbyte","RT","R","RecordEnum","buf_array","blksz","newblk","ba_newblk","curbuf","endbuf","ba_endbuf","ba_next","ba_end","ba_push","_bufs","write_record","ba","payload","evert_RE","parse_StrRun","ich","ifnt","parse_RichStr","parse_XLWideString","rgsStrRun","dwSizeStrRun","write_RichStr","write_XLWideString","parse_Cell","col","iStyleRef","fPhShow","write_Cell","cell","parse_CodeName","parse_XLNullableWideString","cchCharacters","write_XLNullableWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","BErr",42,43,255,"RBErr","parse_BrtColor","fValidRGB","xColorType","nTintAndShade","bRed","bGreen","bBlue","bAlpha","parse_FontFlags","fItalic","fStrikeout","fOutline","fShadow","fCondense","fExtend","ct2type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml","application/vnd.ms-excel.binIndexWs","application/vnd.ms-excel.chartsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml","application/vnd.ms-excel.dialogsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml","application/vnd.ms-excel.macrosheet","application/vnd.ms-excel.macrosheet+xml","application/vnd.ms-excel.intlmacrosheet","application/vnd.ms-excel.binIndexMs","application/vnd.openxmlformats-package.core-properties+xml","application/vnd.openxmlformats-officedocument.custom-properties+xml","application/vnd.openxmlformats-officedocument.extended-properties+xml","application/vnd.openxmlformats-officedocument.customXmlProperties+xml","application/vnd.ms-excel.comments","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml","application/vnd.ms-excel.pivotTable","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml","application/vnd.ms-excel.calcChain","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings","application/vnd.ms-office.activeX","application/vnd.ms-office.activeX+xml","application/vnd.ms-excel.attachedToolbars","application/vnd.ms-excel.connections","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml","application/vnd.ms-excel.externalLink","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml","application/vnd.ms-excel.sheetMetadata","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml","application/vnd.ms-excel.pivotCacheDefinition","application/vnd.ms-excel.pivotCacheRecords","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml","application/vnd.ms-excel.queryTable","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml","application/vnd.ms-excel.userNames","application/vnd.ms-excel.revisionHeaders","application/vnd.ms-excel.revisionLog","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml","application/vnd.ms-excel.tableSingleCells","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml","application/vnd.ms-excel.slicer","application/vnd.ms-excel.slicerCache","application/vnd.ms-excel.slicer+xml","application/vnd.ms-excel.slicerCache+xml","application/vnd.ms-excel.wsSortMap","application/vnd.ms-excel.table","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml","application/vnd.openxmlformats-officedocument.theme+xml","application/vnd.ms-excel.Timeline+xml","application/vnd.ms-excel.TimelineCache+xml","application/vnd.ms-office.vbaProject","application/vnd.ms-office.vbaProjectSignature","application/vnd.ms-office.volatileDependencies","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml","application/vnd.ms-excel.controlproperties+xml","application/vnd.openxmlformats-officedocument.model+data","application/vnd.ms-excel.Survey+xml","application/vnd.openxmlformats-officedocument.drawing+xml","application/vnd.openxmlformats-officedocument.drawingml.chart+xml","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml","application/vnd.openxmlformats-officedocument.vmlDrawing","application/vnd.openxmlformats-package.relationships+xml","application/vnd.openxmlformats-officedocument.oleObject","sheet","CT_LIST","workbooks","xlsx","xlsm","xlsb","xltx","strs","sheets","styles","type2ct","CT","parse_ct","ctext","ct","calcchains","themes","coreprops","extprops","custprops","comments","vba","TODO","rels","xmlns","Extension","ContentType","PartName","WTF","console","error","calcchain","sst","style","CTYPE_XML_ROOT","xmlns:xsd","xmlns:xsi","CTYPE_DEFAULTS","write_ct","f1","bookType","f2","f3","RELS","WB","SHEET","parse_rels","currentFilePath","hash","resolveRelativePathIntoAbsolute","toksFrom","pop","toksTo","reversed","tokTo","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","cur","CORE_PROPS_XML_ROOT","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","cp_doit","write_core_props","CreatedDate","xsi:type","ModifiedDate","EXT_PROPS","parse_ext_props","HeadingPairs","TitlesOfParts","widx","Worksheets","parts","SheetNames","EXT_PROPS_XML_ROOT","xmlns:vt","write_ext_props","W","Application","CUST_PROPS","custregex","parse_cust_props","xmlnsvt","toks","warn","CUST_PROPS_XML_ROOT","write_cust_props","pid","custprop","fmtid","CS2CP",77,128,129,130,134,136,161,162,163,177,178,186,204,222,238,69,"parse_rs","parse_rs_factory","tregex","rpregex","rregex","rend","nlregex","parse_rpr","rpr","intro","outro","font","strike","rgb","color","family","parse_r","terms","rs","sitregex","sirregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","Count","Unique","uniqueCount","SST","straywsregex","write_sst_xml","bookSST","sitag","parse_BrtBeginSst","parse_sst_bin","pass","hopper_sst","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","hex2RGB","rgb2Hex","rgb2HSL","G","C","H6","L2","hsl2RGB","hsl","L","h6","X","rgb_tint","tint","DEF_MDW","MAX_MDW","MIN_MDW","MDW","width2px","width","px2char","px","char2width","chr","cycle_width","collw","find_mdw","coll","parse_fills","Fills","patternType","bgColor","indexed","theme","fgColor","parse_numFmts","NumberFmt","formatCode","numFmtId","write_numFmts","NF","parse_cellXfs","CellXf","fillId","write_cellXfs","cellXfs","parse_sty_xml","make_pstyx","numFmtRegex","cellXfRegex","fillsRegex","STYLES_XML_ROOT","STY","write_sty_xml","wb","parse_BrtFmt","ifmt","stFmtCode","parse_BrtFont","dyHeight","grbit","bls","sss","uls","bFamily","bCharSet","brtColor","bFontScheme","Bold","Italic","Strikeout","Outline","Shadow","Condense","Extend","Sub","Sup","parse_BrtXF","ixfeParent","ixfe","parse_sty_bin","hopper_sty","write_sty_bin","THEME","parse_clrScheme","themeElements","clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","parse_cc_xml","write_cc_xml","parse_BrtCalcChainItem$","encode_cell","parse_cc_bin","hopper_cc","write_cc_bin","parse_comments","dirComments","sheetRels","canonicalpath","parse_cmnt","sheetNames","sheetName","insertCommentsIntoSheet","ref","range","safe_decode_range","thisCell","decode_cell","encoded","encode_range","author","parse_comments_xml","authors","commentList","trim","authorId","guid","sheetRows","textMatch","rt","write_comments_xml","parse_BrtBeginComment","iauthor","rfx","parse_BrtCommentAuthor","parse_BrtCommentText","parse_comments_bin","hopper_cmnt","write_comments_bin","parse_CellParsedFormula","cce","_ssfopts","WS","get_sst_id","get_cell_style","revssf","fontId","borderId","xfId","applyNumberFormat","safe_format","fillid","cellNF","raw_rgb","parse_ws_xml_dim","ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","parse_ws_xml","ridx","mergecells","merges","columns","cellStyles","cols","parse_ws_xml_cols","refguess","mtch","parse_ws_xml_data","parse_ws_xml_hlinks","tmpref","write_ws_xml_merges","location","Rel","rng","addr","seencol","coli","colm","colM","wpx","wch","write_ws_xml_cols","customWidth","write_ws_xml_cell","oldt","oldv","cellDates","Strings","parse_ws_xml_data_factory","cellregex","rowregex","isregex","match_v","match_f","sdata","guess","cells","cref","tagr","tagc","sstr","do_format","cf","marr","mt","marrlen","xlen","cellFormula","sheetStubs","write_ws_xml_data","encode_col","encode_row","WS_XML_ROOT","xmlns:r","write_ws_xml","sidx","rdata","Sheets","parse_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","parse_BrtCellBool","fBool","parse_BrtCellError","parse_BrtCellIsst","isst","parse_BrtCellReal","parse_BrtCellRk","parse_BrtCellSt","parse_BrtFmlaBool","formula","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","parse_BrtHLink","relId","tooltip","display","parse_ws_bin","!id","row","ws_parse","write_ws_bin_cell","write_CELLTABLE","write_ws_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","CustomWBViewDef","push_defaults_array","target","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","wbnsregex","parse_wb_xml","AppVersion","xml_wb","WB_XML_ROOT","safe1904","Workbook","write_wb_xml","sheetId","r:id","parse_BrtBundleSh","hsState","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","dwThemeVersion","strName","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_wb_bin","hopper_wb","write_BUNDLESHS","write_BrtFileVersion","write_BOOKVIEWS","write_BrtCalcProp","write_BrtFileRecover","write_wb_bin","parse_wb","parse_ws","parse_sty","parse_theme","parse_sst","parse_cc","write_wb","write_ws","write_sty","write_sst",44,50,51,52,53,54,55,57,58,59,60,62,63,64,65,66,67,68,70,131,132,133,135,137,138,139,140,141,142,143,144,145,146,147,148,151,152,153,154,155,156,157,158,159,160,164,165,166,167,168,169,170,171,172,173,174,175,176,179,180,181,182,183,184,185,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,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,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,357,358,359,360,361,362,363,364,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,564,565,566,569,570,572,573,574,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,671,672,673,674,675,676,677,678,679,680,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1061,1062,1063,1066,1067,1068,1069,1070,1071,1072,1073,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1177,1178,1180,1181,1182,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2060,2067,2068,2069,2070,2071,2072,2073,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,"parse_ods","ODS","fix_opts_func","fix_opts","Number","fix_read_opts","fix_write_opts","safe_parse_wbrels","wbrels","pwbr","safe_parse_ws","relsPath","nodirs","parse_zip","entries","sort","binname","bookSheets","bookProps","props","propdata","pluck","Props","Custprops","deps","bookDeps","wbsheets","wbext","wbrelsfile","nmode","Directory","Deps","Styles","Themes","bookFiles","bookVBA","vbaraw","bin","add_rels","rId","relobj","write_zip","General","readSync","readFileSync","writeSync","writeFileSync","decode_row","rowstr","unfix_row","fix_row","cstr","decode_col","colstr","unfix_col","fix_col","split_cell","splt","fix_cell","unfix_cell","decode_range","cs","ce","safe_format_cell","XF","format_cell","sheet_to_json","hdr","isempty","outi","create","__rowNum__","sheet_to_row_object_array","sheet_to_csv","txt","qreg","FS","fs","RS","make_csv","sheet_to_formulae","cmds","get_formulae","make_json","make_formulae","parseZip","read","readFile","write","writeFile"],"mappings":"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AAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UASxCjE,QAAOD,QAAU,QAASgD,OAAMvB,MAAO0C,KACnC,SAAW1C,SAAU,cAAgBA,MAAML,OAAQ,CAC/C,MAAO,GAGX,GAAIgD,SAAUH,MAAMI,UAAU5C,SAAW,QAEzC,UAAU,MAAS,YAAa,CAC5B0C,IAAM,EAEV,GAAIG,GAAI,CACR,IAAIC,GAAI,CACR,IAAIC,GAAI,CAERL,KAAMA,KAAQ,CACd,KAAK,GAAIlD,GAAI,EAAGwD,KAAOhD,MAAML,OAAQH,EAAIwD,KAAMxD,IAAK,CAChDuD,EAAIJ,QAAU3C,MAAMR,GAAKQ,MAAMU,WAAWlB,EAC1CsD,IAAKJ,IAAMK,GAAK,GAChBF,GAAIJ,MAAMK,EACVJ,KAAOA,MAAQ,EAAKG,EAGxB,MAAOH,MAAQ,KAIhBO,UAAU,KAAKC,GAAG,SAASrD,QAAQrB,OAAOD,SAC7C,YACA,IAAIiE,OAAQ3C,QAAQ,UAEpB,SAASsD,YAAWC,MAChBhC,KAAKgC,KAAO,IACZhC,MAAKzB,OAAS,CACdyB,MAAKiC,MAAQ,EAEjBF,WAAWzB,WAMP4B,YAAa,SAASC,QAClBnC,KAAKoC,WAAWpC,KAAKiC,MAAQE,SAOjCC,WAAY,SAASC,UACjB,GAAIrC,KAAKzB,OAAS8D,UAAYA,SAAW,EAAG,CACxC,KAAM,IAAIhE,OAAM,sCAAwC2B,KAAKzB,OAAS,mBAAqB,SAAa,wBAQhH+D,SAAU,SAASD,UACfrC,KAAKoC,WAAWC,SAChBrC,MAAKiC,MAAQI,UAOjBE,KAAM,SAAS1E,GACXmC,KAAKsC,SAAStC,KAAKiC,MAAQpE,IAO/B2E,OAAQ,SAASpE,KAQjBqE,QAAS,SAASC,MACd,GAAIC,QAAS,EACTvE,CACJ4B,MAAKkC,YAAYQ,KACjB,KAAKtE,EAAI4B,KAAKiC,MAAQS,KAAO,EAAGtE,GAAK4B,KAAKiC,MAAO7D,IAAK,CAClDuE,QAAUA,QAAU,GAAK3C,KAAKwC,OAAOpE,GAEzC4B,KAAKiC,OAASS,IACd,OAAOC,SAOXC,WAAY,SAASF,MACjB,MAAOtB,OAAMyB,YAAY,SAAU7C,KAAK8C,SAASJ,QAOrDI,SAAU,SAASJ,QAQnBK,qBAAsB,SAASC,OAO/BC,SAAU,WACN,GAAIC,SAAUlD,KAAKyC,QAAQ,EAC3B,OAAO,IAAIU,OACTD,SAAW,GAAM,KAAQ,MACzBA,SAAW,GAAM,IAAQ,EAC1BA,SAAW,GAAM,GACjBA,SAAW,GAAM,GACjBA,SAAW,EAAK,IAChBA,QAAU,KAAS,IAG5B9F,QAAOD,QAAU4E,aAEdF,UAAU,KAAKuB,GAAG,SAAS3E,QAAQrB,OAAOD,SAC7C,YACAA,SAAQkG,OAAS,KACjBlG,SAAQmG,OAAS,KACjBnG,SAAQoG,IAAM,KACdpG,SAAQqG,cAAgB,KACxBrG,SAAQsG,KAAO,IACftG,SAAQuG,YAAc,IACtBvG,SAAQwG,QAAU,UAEZC,GAAG,SAASnF,QAAQrB,OAAOD,SACjC,YACA,IAAIiE,OAAQ3C,QAAQ,UAMpBtB,SAAQ0G,cAAgB,SAASC,KAC7B,MAAO1C,OAAMyC,cAAcC,KAO/B3G,SAAQ4G,kBAAoB,SAASD,KACjC,MAAO1C,OAAMyB,YAAY,aAAciB,KAO3C3G,SAAQ6G,kBAAoB,SAASC,OACjC,MAAO7C,OAAMyB,YAAY,SAAUoB,OAOvC9G,SAAQ+G,YAAc,SAASJ,KAC3B,GAAIK,QAAS/C,MAAMyB,YAAY,cAAeiB,IAC9C,OAAO1C,OAAMgD,iBAAiBD,QAOlChH,SAAQiH,iBAAmB,SAASD,QAChC,MAAO/C,OAAMgD,iBAAiBD,QAOlChH,SAAQ0F,YAAc,SAASwB,WAAYzF,OACvC,MAAOwC,OAAMyB,YAAYwB,WAAYzF,OAOzCzB,SAAQqE,UAAY,SAAS5C,OACzB,MAAOwC,OAAMI,UAAU5C,OAO3BzB,SAAQmH,aAAe,SAASC,MAC5B,MAAOnD,OAAMkD,aAAaC,MAO9BpH,SAAQqH,iBAAmBpD,MAAMoD,gBAMjCrH,SAAQsH,iBAAmBrD,MAAMqD,gBAOjCtH,SAAQuH,OAAS,SAASZ,KACtB,MAAO1C,OAAMsD,OAAOZ,KAOxB3G,SAAQwH,gBAAkB,SAASvE,mBAC/B,MAAOgB,OAAMuD,gBAAgBvE,mBAOjCjD,SAAQyH,SAAW,SAAUC,QACzB,MAAOzD,OAAMwD,SAASC,WAIvBhD,UAAU,KAAKiD,GAAG,SAASrG,QAAQrB,OAAOD,SAC7C,YACA,IAAI4H,sBAAyBC,cAAe,mBAAwBC,eAAgB,mBAAwBC,eAAgB,WAE5H,IAAIC,MAAO1G,QAAQ,OACnBtB,SAAQ6D,oBAAsB+D,eAAiB,aAAe,OAC9D5H,SAAQ4D,kBAAoBgE,eAAiB,aAAe,OAE5D5H,SAAQwD,MAAQ,QAChBxD,SAAQyD,SAAW,SAAShC,OACxB,MAAOuG,MAAKC,WAAWxG,OAE3BzB,SAAQ2D,WAAc,SAASlC,OAC3B,MAAOuG,MAAKE,WAAWzG,UAGxBuG,KAAO,KAAKG,GAAG,SAAS7G,QAAQrB,OAAOD,SAC1C,YAEA,IAAIkG,QAAS5E,QAAQ,WAoBrB,SAASd,OAAMqE,KAAMuD,SAEjB,KAAKvF,eAAgBrC,QAAQ,MAAO,IAAIA,OAAMqE,KAAMuD,QAOpDvF,MAAKwF,QAELxF,MAAK2D,QAAU,IAGf3D,MAAKyF,KAAO,EACZ,IAAIzD,KAAM,CACNhC,KAAK0F,KAAK1D,KAAMuD,SAEpBvF,KAAK2F,MAAQ,WACT,GAAIC,QAAS,GAAIjI,MACjB,KAAK,GAAIS,KAAK4B,MAAM,CAChB,SAAWA,MAAK5B,KAAO,WAAY,CAC/BwH,OAAOxH,GAAK4B,KAAK5B,IAGzB,MAAOwH,SAGfjI,MAAM2C,UAAY7B,QAAQ,WAC1Bd,OAAM2C,UAAUoF,KAAOjH,QAAQ,SAC/Bd,OAAMkI,QAAUpH,QAAQ,YACxBd,OAAMmI,SAAWrH,QAAQ,aAMzBd,OAAMyD,MAAQ3C,QAAQ,0BAEtBd,OAAM0F,QAKF1E,OAAS,SAASC,OACd,MAAOyE,QAAO1E,OAAOC,QAMzBa,OAAS,SAASb,OACd,MAAOyE,QAAO5D,OAAOb,QAG7BjB,OAAMoI,aAAetH,QAAQ,iBAC7BrB,QAAOD,QAAUQ,QAEdqI,WAAW,EAAEC,iBAAiB,EAAEC,aAAa,EAAEC,0BAA0B,EAAEC,SAAS,GAAGC,WAAW,GAAGC,YAAY,KAAKC,IAAI,SAAS9H,QAAQrB,OAAOD,SACrJ,YACA,IAAIkG,QAAS5E,QAAQ,WACrB,IAAI+H,YAAa/H,QAAQ,eACzBrB,QAAOD,QAAU,SAAS6E,KAAMuD,SAC5B,GAAIC,OAAOiB,WAAYrI,EAAGQ,KAC1B2G,SAAUA,WACV,IAAIA,QAAQlC,OAAQ,CAChBrB,KAAOqB,OAAO5D,OAAOuC,MAGzByE,WAAa,GAAID,YAAWxE,KAAMuD,QAClCC,OAAQiB,WAAWjB,KACnB,KAAKpH,EAAI,EAAGA,EAAIoH,MAAMjH,OAAQH,IAAK,CAC/BQ,MAAQ4G,MAAMpH,EACd4B,MAAK0G,KAAK9H,MAAM+H,SAAU/H,MAAMgI,cAC5BtD,OAAQ,KACRuD,sBAAuB,KACvBpD,KAAM7E,MAAM6E,KACZF,IAAK3E,MAAM2E,IACXI,QAAU/E,MAAMkI,YAAYvI,OAASK,MAAMkI,YAAc,KACzDtD,cAAe+B,QAAQ/B,gBAG/B,GAAIiD,WAAWM,WAAWxI,OAAQ,CAC9ByB,KAAK2D,QAAU8C,WAAWM,WAG9B,MAAO/G,SAGRgG,WAAW,EAAEgB,eAAe,KAAKC,IAAI,SAASxI,QAAQrB,OAAOD,UAChE,SAAW+J,QACX,YACA9J,QAAOD,QAAU,SAAS6E,KAAMmF,UAC5B,MAAO,IAAID,QAAOlF,KAAMmF,UAE5B/J,QAAOD,QAAQiK,KAAO,SAASzF,GAC3B,MAAOuF,QAAOG,SAAS1F,MAExBrD,KAAK0B,WAAakH,UAAW,YAAcA,OAASI,gBACjDC,IAAI,SAAS9I,QAAQrB,OAAOD,SAClC,YACA,IAAIqK,kBAAmB/I,QAAQ,qBAE/B,SAASgJ,kBAAiBzF,MACtBhC,KAAKgC,KAAOA,IACZhC,MAAKzB,OAASyB,KAAKgC,KAAKzD,MACxByB,MAAKiC,MAAQ,EAEjBwF,iBAAiBnH,UAAY,GAAIkH,iBAKjCC,kBAAiBnH,UAAUwC,SAAW,SAASJ,MAC3C1C,KAAKkC,YAAYQ,KACjB,IAAIC,QAAS3C,KAAKgC,KAAK0F,MAAM1H,KAAKiC,MAAOjC,KAAKiC,MAAQS,KACtD1C,MAAKiC,OAASS,IACd,OAAOC,QAEXvF,QAAOD,QAAUsK,mBAEdE,qBAAqB,KAAKC,IAAI,SAASnJ,QAAQrB,OAAOD,SACzD,YACA,IAAI0I,SAAUpH,QAAQ,YACtB,IAAI2C,OAAQ3C,QAAQ,UACpB,IAAI0B,OAAQ1B,QAAQ,UACpB,IAAIoJ,WAAYpJ,QAAQ,cACxB,IAAIqH,UAAWrH,QAAQ,aACvB,IAAI4E,QAAS5E,QAAQ,WACrB,IAAIsH,cAAetH,QAAQ,iBAC3B,IAAIsB,kBAAmBtB,QAAQ,qBAC/B,IAAIqJ,YAAarJ,QAAQ,eACzB,IAAII,MAAOJ,QAAQ,SACnB,IAAIsJ,cAAetJ,QAAQ,iBAC3B,IAAIuJ,kBAAmBvJ,QAAQ,qBAO/B,IAAIwJ,YAAa,SAASvB,MACtB,GAAIA,KAAKwB,gBAAiBnI,kBAAkB,CACxC2G,KAAKwB,MAAQxB,KAAKwB,MAAM3H,YACxBmG,MAAKnB,QAAQjC,OAAS,IACtBoD,MAAKnB,QAAQlC,OAAS,KAEtB,IAAIjC,MAAMI,UAAUkF,KAAKwB,SAAW,aAAc,CAC9C,GAAIC,MAAOzB,KAAKwB,KAGhBxB,MAAKwB,MAAQ,GAAIlD,YAAWmD,KAAK5J,OAEjC,IAAI4J,KAAK5J,SAAW,EAAG,CACnBmI,KAAKwB,MAAME,IAAID,KAAM,KAIjC,MAAOzB,MAAKwB,MAQhB,IAAIG,eAAgB,SAAS3B,MACzB,GAAI/D,QAASsF,WAAWvB,MACpBnC,KAAOnD,MAAMI,UAAUmB,OAC3B,IAAI4B,OAAS,SAAU,CACnB,IAAKmC,KAAKnB,QAAQjC,OAAQ,CAGtB,GAAIuC,QAAQyC,WAAY,CACpB,MAAOR,YAAWnF,OAAQ,UAGlC,MAAO+D,MAAK6B,WAEhB,MAAO5F,QAQX,IAAI6F,cAAe,SAASC,QACxB,GAAI9F,QAASsF,WAAWjI,KACxB,IAAI2C,SAAW,YAAeA,UAAW,YAAa,CAClD,MAAO,GAGX,GAAI3C,KAAKuF,QAAQlC,OAAQ,CACrBV,OAASU,OAAO5D,OAAOkD,QAE3B,GAAI8F,QAAUzI,KAAKuF,QAAQjC,OAAQ,CAG/BX,OAAS+F,IAAIC,WAAWhG,YAEvB,CAEDA,OAASvB,MAAMyB,YAAY,SAAUF,QAGzC,IAAK8F,SAAWzI,KAAKuF,QAAQjC,OAAQ,CACjCX,OAASvB,MAAMyB,YAAY,SAAU6F,IAAIE,WAAWjG,SAExD,MAAOA,QASX,IAAIkG,WAAY,SAASC,KAAM9G,KAAMuD,SACjCvF,KAAK8I,KAAOA,IACZ9I,MAAKuD,IAAMgC,QAAQhC,GACnBvD,MAAKyD,KAAO8B,QAAQ9B,IACpBzD,MAAK2D,QAAU4B,QAAQ5B,OAEvB3D,MAAKkI,MAAQlG,IACbhC,MAAKuF,QAAUA,OAOfvF,MAAK+I,kBACHxF,IAAMgC,QAAQhC,IACdE,KAAO8B,QAAQ9B,MAIrBoF,WAAUvI,WAKN0I,OAAQ,WACJ,MAAOR,cAAalK,KAAK0B,KAAM,OAMnCuI,SAAU,WACN,MAAOC,cAAalK,KAAK0B,KAAM,QAMnCiJ,aAAc,WACV,GAAItG,QAAS0F,cAAcrI,KAC3B,OAAOoB,OAAMyB,YAAY,aAAcF,SAM3CuG,aAAc,WACV,GAAIvG,QAAS0F,cAAcrI,KAC3B,OAAOoB,OAAMyB,YAAY,aAAcF,SAM3CwG,cAAe,WACX,MAAOnJ,MAAKkJ,eAAe/E,QAWnC,IAAIiF,UAAW,SAASC,IAAKC,OACzB,GAAIC,KAAM,GACNnL,CACJ,KAAKA,EAAI,EAAGA,EAAIkL,MAAOlL,IAAK,CACxBmL,KAAO3J,OAAOC,aAAawJ,IAAM,IACjCA,KAAMA,MAAQ,EAElB,MAAOE,KASX,IAAIC,QAAS,WACT,GAAI7G,WAAavE,EAAGqL,IACpB,KAAKrL,EAAI,EAAGA,EAAIsL,UAAUnL,OAAQH,IAAK,CACnC,IAAKqL,OAAQC,WAAUtL,GAAI,CACvB,GAAIsL,UAAUtL,GAAGuL,eAAeF,aAAgB9G,QAAO8G,QAAU,YAAa,CAC1E9G,OAAO8G,MAAQC,UAAUtL,GAAGqL,QAIxC,MAAO9G,QAUX,IAAIiH,kBAAmB,SAAS5L,GAC5BA,EAAIA,KACJ,IAAIA,EAAEqF,SAAW,OAASrF,EAAEsF,SAAW,MAAQtF,EAAEsF,SAAWgE,WAAY,CACpEtJ,EAAEsF,OAAS,KAEftF,EAAIwL,OAAOxL,EAAG8H,SACd9H,GAAEyF,KAAOzF,EAAEyF,MAAQ,GAAIN,KACvB,IAAInF,EAAE0F,cAAgB,KAAM1F,EAAE0F,YAAc1F,EAAE0F,YAAYmG,aAE1D,OAAO7L,GAWX,IAAI8L,SAAU,SAAShB,KAAM9G,KAAMhE,GAE/B,GAAI+L,UAAW3I,MAAMI,UAAUQ,MAC3BgI,MAEJhM,GAAI4L,iBAAiB5L,EAErB,IAAIA,EAAEwF,gBAAkBwG,OAASC,aAAanB,OAAQ,CAClDoB,UAAU5L,KAAK0B,KAAMgK,OAAQ,MAGjC,GAAIhM,EAAEuF,KAAOvB,OAAS,YAAeA,QAAS,YAAa,CACvDhE,EAAEqF,OAAS,KACXrF,GAAEsF,OAAS,KACXtB,MAAO,SAEN,IAAI+H,WAAa,SAAU,CAC5B,GAAI/L,EAAEsF,SAAWtF,EAAEqF,OAAQ,CAEvB,GAAIrF,EAAE6I,wBAA0B,KAAM,CAGlC7E,KAAOZ,MAAMyC,cAAc7B,YAIlC,CACDhE,EAAEqF,OAAS,KACXrF,GAAEsF,OAAS,IAEX,KAAKyG,YAAc/H,eAAgBjC,mBAAmB,CAClD,KAAM,IAAI1B,OAAM,gBAAkByK,KAAO,mCAI7C,GAAIiB,WAAa,cAAe,CAC5B/H,KAAOZ,MAAMyB,YAAY,aAAcb,OAI/C,GAAI6C,QAAS,GAAIgE,WAAUC,KAAM9G,KAAMhE,EACvCgC,MAAKwF,MAAMsD,MAAQjE,MACnB,OAAOA,QASX,IAAIoF,cAAe,SAAUE,MACzB,GAAIA,KAAKzC,OAAO,IAAM,IAAK,CACvByC,KAAOA,KAAKC,UAAU,EAAGD,KAAK5L,OAAS,GAE3C,GAAI8L,WAAYF,KAAKG,YAAY,IACjC,OAAQD,WAAY,EAAKF,KAAKC,UAAU,EAAGC,WAAa,GAW5D,IAAIH,WAAY,SAASpB,KAAMtF,eAE3B,GAAIsF,KAAKpB,OAAO,IAAM,IAAK,CACvBoB,MAAQ,IAGZtF,oBAAwBA,iBAAkB,YAAeA,cAAgB,KAGzE,KAAKxD,KAAKwF,MAAMsD,MAAO,CACnBgB,QAAQxL,KAAK0B,KAAM8I,KAAM,MACrBvF,IAAK,KACLC,cAAeA,gBAGvB,MAAOxD,MAAKwF,MAAMsD,MAStB,IAAIyB,8BAA+B,SAAS7D,KAAMhD,aAC9C,GAAIf,QAAS,GAAI5C,kBACbc,OAGJ,IAAI6F,KAAKwB,gBAAiBnI,kBAAkB,CACxC4C,OAAOzC,iBAAmBwG,KAAKwB,MAAMhI,gBACrCyC,QAAOxC,MAAQuG,KAAKwB,MAAM/H,KAE1B,IAAIwC,OAAOzC,mBAAqB,GAAKwG,KAAKnD,IAAK,CAC3CG,YAAcqC,aAAa,QAC3BpD,QAAOtC,kBAAoB,EAC3BsC,QAAOxC,MAAQ,MAEd,IAAIuG,KAAKwB,MAAM9H,oBAAsBsD,YAAY/C,MAAO,CACzDgC,OAAOtC,kBAAoBqG,KAAKwB,MAAM1H,2BAErC,CACDK,QAAU6F,KAAKwB,MAAM3H,YAErBoC,QAAOtC,kBAAoBqD,YAAY9C,SAASQ,MAAMyB,YAAYa,YAAY3C,kBAAmBF,eAGpG,CAEDA,QAAUwH,cAAc3B,KACxB,KAAK7F,SAAWA,QAAQtC,SAAW,GAAKmI,KAAKnD,IAAK,CAC9CG,YAAcqC,aAAa,QAC3BlF,SAAU,GAEd8B,OAAOzC,iBAAmBW,QAAQtC,MAClCoE,QAAOxC,MAAQA,MAAMU,QACrB8B,QAAOtC,kBAAoBqD,YAAY9C,SAASQ,MAAMyB,YAAYa,YAAY3C,kBAAmBF,UAGrG8B,OAAO1C,eAAiB0C,OAAOtC,kBAAkB9B,MACjDoE,QAAOvC,kBAAoBsD,YAAY/C,KAEvC,OAAOgC,QAWX,IAAI6H,kBAAmB,SAAS1B,KAAMpC,KAAM+D,iBAAkBtI,QAC1D,GAAIH,MAAOyI,iBAAiBpK,kBACxBqK,mBAAqBtJ,MAAMyB,YAAY,SAAUhE,KAAK+J,WAAWlC,KAAKoC,OACtEnF,QAAU+C,KAAK/C,SAAW,GAC1BgH,kBAAoBvJ,MAAMyB,YAAY,SAAUhE,KAAK+J,WAAWjF,UAChEiH,mBAAqBF,mBAAmBnM,SAAWmI,KAAKoC,KAAKvK,OAC7DsM,kBAAoBF,kBAAkBpM,SAAWoF,QAAQpF,OACzDP,EAAI0I,KAAKnB,QACTuF,QACAC,QACAC,YAAc,GACdC,sBAAwB,GACxBC,yBAA2B,GAC3B3H,IAAKE,IAIT,IAAIiD,KAAKqC,iBAAiBxF,MAAQmD,KAAKnD,IAAK,CACxCA,IAAMmD,KAAKnD,QACR,CACHA,IAAMvF,EAAEuF,IAIZ,GAAGmD,KAAKqC,iBAAiBtF,OAASiD,KAAKjD,KAAM,CACzCA,KAAOiD,KAAKjD,SACT,CACHA,KAAOzF,EAAEyF,KAQbqH,QAAUrH,KAAK0H,UACfL,SAAUA,SAAW,CACrBA,SAAUA,QAAUrH,KAAK2H,YACzBN,SAAUA,SAAW,CACrBA,SAAUA,QAAUrH,KAAK4H,aAAe,CAExCN,SAAUtH,KAAK6H,cAAgB,IAC/BP,SAAUA,SAAW,CACrBA,SAAUA,QAAWtH,KAAK8H,WAAa,CACvCR,SAAUA,SAAW,CACrBA,SAAUA,QAAUtH,KAAK+H,SAEzB,IAAIZ,mBAAoB,CAUpBK,sBAEI7B,SAAS,EAAG,GAEZA,SAASjJ,MAAMuK,oBAAqB,GAEpCA,kBAEJM,cAEI,KAEA5B,SAAS6B,sBAAsB1M,OAAQ,GAEvC0M,sBAGR,GAAGJ,kBAAmB,CAElBK,yBAEI9B,SAAS,EAAG,GAEZA,SAASpJ,KAAKG,MAAMwK,mBAAoB,GAExCA,iBAEJK,cAEI,KAEA5B,SAAS8B,yBAAyB3M,OAAQ,GAE1C2M,yBAGR,GAAIO,QAAS,EAGbA,SAAU,QAGVA,SAAWb,oBAAsBC,kBAAqB,SAAa,UAEnEY,SAAUhB,iBAAiBrK,iBAE3BqL,SAAUrC,SAAS0B,QAAS,EAE5BW,SAAUrC,SAAS2B,QAAS,EAE5BU,SAAUrC,SAASqB,iBAAiBtK,MAAO,EAE3CsL,SAAUrC,SAASqB,iBAAiBxK,eAAgB,EAEpDwL,SAAUrC,SAASqB,iBAAiBvK,iBAAkB,EAEtDuL,SAAUrC,SAASsB,mBAAmBnM,OAAQ,EAE9CkN,SAAUrC,SAAS4B,YAAYzM,OAAQ,EAGvC,IAAImN,YAAa7D,UAAU8D,kBAAoBF,OAASf,mBAAqBM,WAE7E,IAAIY,WAAY/D,UAAUgE,oBAE1B,QAEAJ,OAEArC,SAASuB,kBAAkBpM,OAAQ,GAEnC,WAEA,YAECgF,MAAQ,KAAO,gBAAqB,oBAErC6F,SAASjH,OAAQ,GAEjBuI,mBAEAM,YAEAL,iBAEA,QACIe,WAAYA,WACZE,UAAWA,UACXnB,iBAAkBA,kBAM1B,IAAI/B,MASAhD,KAAM,SAASoG,OAAQvG,SACnB,KAAM,IAAIlH,OAAM,qEAUpB0N,OAAQ,SAASC,QACb,GAAIrJ,WACAsJ,SAAUC,aAAcxF,KAAMyF,SAClC,KAAKF,WAAYjM,MAAKwF,MAAO,CACzB,IAAKxF,KAAKwF,MAAMmE,eAAesC,UAAW,CACtC,SAEJvF,KAAO1G,KAAKwF,MAAMyG,SAElBE,WAAY,GAAItD,WAAUnC,KAAKoC,KAAMpC,KAAKwB,MAAOsB,OAAO9C,KAAKnB,SAC7D2G,cAAeD,SAASvE,MAAM1H,KAAKyF,KAAKlH,OAAQ0N,SAAS1N,OACzD,IAAI0N,SAASvE,MAAM,EAAG1H,KAAKyF,KAAKlH,UAAYyB,KAAKyF,MACjDuG,OAAOE,aAAcC,WAAY,CAC7BxJ,OAAOyJ,KAAKD,YAGpB,MAAOxJ,SAYX+D,KAAM,SAASoC,KAAM9G,KAAMhE,GACvB,GAAI0L,UAAUnL,SAAW,EAAG,CACxB,GAAI6C,MAAMwD,SAASkE,MAAO,CACtB,GAAIuD,QAASvD,IACb,OAAO9I,MAAK+L,OAAO,SAASG,aAAcxF,MACtC,OAAQA,KAAKnD,KAAO8I,OAAOjF,KAAK8E,oBAGnC,CACD,MAAOlM,MAAK+L,OAAO,SAASG,aAAcxF,MACtC,OAAQA,KAAKnD,KAAO2I,eAAiBpD,OACtC,IAAM,UAGZ,CACDA,KAAO9I,KAAKyF,KAAOqD,IACnBgB,SAAQxL,KAAK0B,KAAM8I,KAAM9G,KAAMhE,GAEnC,MAAOgC,OAQXsM,OAAQ,SAASC,KACb,IAAKA,IAAK,CACN,MAAOvM,MAGX,GAAIoB,MAAMwD,SAAS2H,KAAM,CACrB,MAAOvM,MAAK+L,OAAO,SAASG,aAAcxF,MACtC,MAAOA,MAAKnD,KAAOgJ,IAAInF,KAAK8E,gBAKpC,GAAIpD,MAAO9I,KAAKyF,KAAO8G,GACvB,IAAIC,WAAYtC,UAAU5L,KAAK0B,KAAM8I,KAGrC,IAAI2D,KAAMzM,KAAK2F,OACf8G,KAAIhH,KAAO+G,UAAU1D,IACrB,OAAO2D,MAQXC,OAAQ,SAAS5D,MACbA,KAAO9I,KAAKyF,KAAOqD,IACnB,IAAIpC,MAAO1G,KAAKwF,MAAMsD,KACtB,KAAKpC,KAAM,CAEP,GAAIoC,KAAKpB,OAAO,IAAM,IAAK,CACvBoB,MAAQ,IAEZpC,KAAO1G,KAAKwF,MAAMsD,MAGtB,GAAIpC,OAASA,KAAKnD,IAAK,OAEZvD,MAAKwF,MAAMsD,UACf,CAEH,GAAI6D,MAAO3M,KAAK+L,OAAO,SAASG,aAAcxF,MAC1C,MAAOA,MAAKoC,KAAKpB,MAAM,EAAGoB,KAAKvK,UAAYuK,MAE/C,KAAK,GAAI1K,GAAI,EAAGA,EAAIuO,KAAKpO,OAAQH,IAAK,OAC3B4B,MAAKwF,MAAMmH,KAAKvO,GAAG0K,OAIlC,MAAO9I,OAWX4M,SAAU,SAASrH,SACfA,QAAUiE,OAAOjE,aACblC,OAAQ,KACRK,YAAa,QACba,KAAM,SACNZ,QAAS,MAGbvC,OAAMkD,aAAaiB,QAAQhB,KAE3B,IAAIsI,YACAC,eAAiB,EACjBC,iBAAmB,EACnBC,OAAQ5O,EACRuM,kBAAoBvJ,MAAMyB,YAAY,SAAU7C,KAAK4I,WAAWrD,QAAQ5B,SAAW3D,KAAK2D,SAAW,IAGvG,KAAK,GAAImF,QAAQ9I,MAAKwF,MAAO,CACzB,IAAKxF,KAAKwF,MAAMmE,eAAeb,MAAO,CAClC,SAEJ,GAAIpC,MAAO1G,KAAKwF,MAAMsD,KAEtB,IAAImE,iBAAkBvG,KAAKnB,QAAQ7B,aAAe6B,QAAQ7B,YAAYmG,aACtE,IAAInG,aAAcqC,aAAakH,gBAC/B,KAAKvJ,YAAa,CACd,KAAM,IAAIrF,OAAM4O,gBAAkB,wCAGtC,GAAIxC,kBAAmBF,6BAA6BjM,KAAK0B,KAAM0G,KAAMhD,YAErE,IAAIwJ,SAAU1C,iBAAiBlM,KAAK0B,KAAM8I,KAAMpC,KAAM+D,iBAAkBqC,eACxEA,iBAAkBI,QAAQxB,WAAWnN,OAASkM,iBAAiBxK,cAC/D8M,mBAAoBG,QAAQtB,UAAUrN,MACtCsO,SAAQT,KAAKc,SAGjB,GAAIC,QAAS,EAGbA,QAAStF,UAAUuF,sBAEnB,WAEA,WAEAhE,SAASyD,QAAQtO,OAAQ,GAEzB6K,SAASyD,QAAQtO,OAAQ,GAEzB6K,SAAS2D,iBAAkB,GAE3B3D,SAAS0D,eAAgB,GAEzB1D,SAASuB,kBAAkBpM,OAAQ,GAEnCoM,iBAKA,IAAI0C,UAAW9H,QAAQhB,KAAK+I,aAC5B,IAAGD,WAAW,cAAcA,WAAW,eAAeA,WAAW,QAAQA,WAAW,aAAc,CAC9FL,OAAS,GAAIhF,kBAAiB8E,eAAiBC,iBAAmBI,OAAO5O,YACxE,CACDyO,OAAS,GAAIjF,cAAa+E,eAAiBC,iBAAmBI,OAAO5O,QAGzE,IAAKH,EAAI,EAAGA,EAAIyO,QAAQtO,OAAQH,IAAK,CACjC4O,OAAOO,OAAOV,QAAQzO,GAAGsN,WACzBsB,QAAOO,OAAOV,QAAQzO,GAAGqM,iBAAiBpK,mBAE9C,IAAKjC,EAAI,EAAGA,EAAIyO,QAAQtO,OAAQH,IAAK,CACjC4O,OAAOO,OAAOV,QAAQzO,GAAGwN,WAG7BoB,OAAOO,OAAOJ,OAEd,IAAIK,KAAMR,OAAOS,UAIjB,QAAOlI,QAAQhB,KAAK+I,eAEhB,IAAK,aACL,IAAK,cACL,IAAK,aACF,MAAOlM,OAAMyB,YAAY0C,QAAQhB,KAAK+I,cAAeE,IACxD,KAAK,OACF,MAAOpM,OAAMgD,iBAAiBhD,MAAMyB,YAAY,cAAe2K,KAElE,KAAK,SACF,MAAQjI,SAAc,OAAIlC,OAAO1E,OAAO6O,KAAOA,GAClD,SACG,MAAOA,OASlBrN,MAAO,SAAUvB,MAAO0C,KACpB,MAAOnB,OAAMvB,MAAO0C,MAOxBsH,WAAY,SAAU8E,QAClB,MAAOtM,OAAMyB,YAAY,SAAUhE,KAAK+J,WAAW8E,UAOvD/E,WAAY,SAAU/J,OAClB,MAAOC,MAAK8J,WAAW/J,QAG/BxB,QAAOD,QAAUuL,MAEd1C,WAAW,EAAE2H,qBAAqB,EAAE1H,iBAAiB,EAAE2H,UAAU,EAAE1H,aAAa,EAAE2H,eAAe,GAAGC,cAAc,GAAGC,iBAAiB,GAAGzH,YAAY,GAAG0H,qBAAqB,GAAGC,SAAS,GAAGpM,UAAU,KAAKqM,IAAI,SAASzP,QAAQrB,OAAOD,SAC1O,YACAA,SAAQwO,kBAAoB,MAC5BxO,SAAQ0O,oBAAsB,MAC9B1O,SAAQiQ,sBAAwB,MAChCjQ,SAAQgR,gCAAkC,MAC1ChR,SAAQiR,4BAA8B,MACtCjR,SAAQkR,gBAAkB,aAEpBC,IAAI,SAAS7P,QAAQrB,OAAOD,SAClC,YACA,IAAI4E,YAAatD,QAAQ,eACzB,IAAI2C,OAAQ3C,QAAQ,UAEpB,SAAS8P,cAAavM,KAAM6E,uBACxB7G,KAAKgC,KAAOA,IACZ,KAAK6E,sBAAuB,CACxB7G,KAAKgC,KAAOZ,MAAMyC,cAAc7D,KAAKgC,MAEzChC,KAAKzB,OAASyB,KAAKgC,KAAKzD,MACxByB,MAAKiC,MAAQ,EAEjBsM,aAAajO,UAAY,GAAIyB,WAI7BwM,cAAajO,UAAUkC,OAAS,SAASpE,GACrC,MAAO4B,MAAKgC,KAAK1C,WAAWlB,GAKhCmQ,cAAajO,UAAUyC,qBAAuB,SAASC,KACnD,MAAOhD,MAAKgC,KAAKsI,YAAYtH,KAKjCuL,cAAajO,UAAUwC,SAAW,SAASJ,MACvC1C,KAAKkC,YAAYQ,KAEjB,IAAIC,QAAS3C,KAAKgC,KAAK0F,MAAM1H,KAAKiC,MAAOjC,KAAKiC,MAAQS,KACtD1C,MAAKiC,OAASS,IACd,OAAOC,QAEXvF,QAAOD,QAAUoR,eAEdC,eAAe,EAAE3M,UAAU,KAAK4M,IAAI,SAAShQ,QAAQrB,OAAOD,SAC/D,YAEA,IAAIiE,OAAQ3C,QAAQ,UAMpB,IAAIsJ,cAAe,WACf/H,KAAKgC,QAET+F,cAAazH,WAKTiN,OAAQ,SAAS3O,OACbA,MAAQwC,MAAMyB,YAAY,SAAUjE,MACpCoB,MAAKgC,KAAKoK,KAAKxN,QAMnB6O,SAAU,WACN,MAAOzN,MAAKgC,KAAK0M,KAAK,KAI9BtR,QAAOD,QAAU4K,eAEdlG,UAAU,KAAK8M,IAAI,SAASlQ,QAAQrB,OAAOD,UAC9C,SAAW+J,QACX,YACA/J,SAAQkG,OAAS,IACjBlG,SAAQ8G,MAAQ,IAChB9G,SAAQuQ,OAAS,IACjBvQ,SAAQyR,kBAAqBC,eAAgB,mBAAsB7J,cAAe,WAIlF7H,SAAQmL,iBAAoBpB,UAAW,WAEvC/J,SAAQ2R,iBAAoB9J,cAAe,WAE3C,UAAW6J,eAAgB,YAAa,CACpC1R,QAAQ4R,KAAO,UAEd,CACD,GAAI5K,QAAS,GAAI0K,aAAY,EAC7B,KACI1R,QAAQ4R,KAAO,GAAIC,OAAM7K,SACrBI,KAAM,oBACP7B,OAAS,EAEhB,MAAOxF,GACH,IACI,GAAI+R,SAAUzR,OAAO0R,aAAe1R,OAAO2R,mBAAqB3R,OAAO4R,gBAAkB5R,OAAO6R,aAChG,IAAIC,SAAU,GAAIL,QAClBK,SAAQ/B,OAAOpJ,OACfhH,SAAQ4R,KAAOO,QAAQC,QAAQ,mBAAmB7M,OAAS,EAE/D,MAAOxF,GACHC,QAAQ4R,KAAO,WAKxBzQ,KAAK0B,WAAakH,UAAW,YAAcA,OAASI,gBACjDkI,IAAI,SAAS/Q,QAAQrB,OAAOD,SAClC,YACA,IAAI4E,YAAatD,QAAQ,eAEzB,SAAS+I,kBAAiBxF,MACtB,GAAIA,KAAM,CACNhC,KAAKgC,KAAOA,IACZhC,MAAKzB,OAASyB,KAAKgC,KAAKzD,MACxByB,MAAKiC,MAAQ,GAGrBuF,iBAAiBlH,UAAY,GAAIyB,WAIjCyF,kBAAiBlH,UAAUkC,OAAS,SAASpE,GACzC,MAAO4B,MAAKgC,KAAK5D,GAKrBoJ,kBAAiBlH,UAAUyC,qBAAuB,SAASC,KACvD,GAAIyM,MAAOzM,IAAI1D,WAAW,GACtBoQ,KAAO1M,IAAI1D,WAAW,GACtBqQ,KAAO3M,IAAI1D,WAAW,GACtBsQ,KAAO5M,IAAI1D,WAAW,EAC1B,KAAK,GAAIlB,GAAI4B,KAAKzB,OAAS,EAAGH,GAAK,IAAKA,EAAG,CACvC,GAAI4B,KAAKgC,KAAK5D,KAAOqR,MAAQzP,KAAKgC,KAAK5D,EAAI,KAAOsR,MAAQ1P,KAAKgC,KAAK5D,EAAI,KAAOuR,MAAQ3P,KAAKgC,KAAK5D,EAAI,KAAOwR,KAAM,CAC9G,MAAOxR,IAIf,OAAQ,EAKZoJ,kBAAiBlH,UAAUwC,SAAW,SAASJ,MAC3C1C,KAAKkC,YAAYQ,KACjB,IAAGA,OAAS,EAAG,CAEX,MAAO,IAAIsC,YAAW,GAE1B,GAAIrC,QAAS3C,KAAKgC,KAAK6N,SAAS7P,KAAKiC,MAAOjC,KAAKiC,MAAQS,KACzD1C,MAAKiC,OAASS,IACd,OAAOC,QAEXvF,QAAOD,QAAUqK,mBAEdgH,eAAe,IAAIsB,IAAI,SAASrR,QAAQrB,OAAOD,SAClD,YAEA,IAAIiE,OAAQ3C,QAAQ,UAOpB,IAAIuJ,kBAAmB,SAASzJ,QAC5ByB,KAAKgC,KAAO,GAAIgD,YAAWzG,OAC3ByB,MAAKiC,MAAQ,EAEjB+F,kBAAiB1H,WAKbiN,OAAQ,SAAS3O,OACb,GAAIA,MAAML,SAAW,EAAG,CAEpBK,MAAQwC,MAAMyB,YAAY,aAAcjE,MACxCoB,MAAKgC,KAAKoG,IAAIxJ,MAAOoB,KAAKiC,MAC1BjC,MAAKiC,OAASrD,MAAML,SAO5BkP,SAAU,WACN,MAAOzN,MAAKgC,MAIpB5E,QAAOD,QAAU6K,mBAEdnG,UAAU,KAAKkO,IAAI,SAAStR,QAAQrB,OAAOD,SAC9C,YAEA,IAAIiE,OAAQ3C,QAAQ,UACpB,IAAIoH,SAAUpH,QAAQ,YACtB,IAAIqJ,YAAarJ,QAAQ,eAUzB,IAAIuR,UAAW,GAAIC,OAAM,IACzB,KAAK,GAAI7R,GAAE,EAAGA,EAAE,IAAKA,IAAK,CACxB4R,SAAS5R,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EAE5F4R,SAAS,KAAKA,SAAS,KAAK,CAG5B,IAAIE,YAAa,SAAUpM,KACvB,GAAIqM,KAAKC,EAAGC,GAAIC,MAAOlS,EAAGmS,QAAUzM,IAAIvF,OAAQiS,QAAU,CAG1D,KAAKF,MAAQ,EAAGA,MAAQC,QAASD,QAAS,CACtCF,EAAItM,IAAIxE,WAAWgR,MACnB,KAAKF,EAAI,SAAY,OAAWE,MAAM,EAAIC,QAAU,CAChDF,GAAKvM,IAAIxE,WAAWgR,MAAM,EAC1B,KAAKD,GAAK,SAAY,MAAQ,CAC1BD,EAAI,OAAYA,EAAI,OAAW,KAAOC,GAAK,MAC3CC,UAGRE,SAAWJ,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAIhE,GAAIvK,QAAQiJ,WAAY,CACpBqB,IAAM,GAAInL,YAAWwL,aAClB,CACHL,IAAM,GAAIF,OAAMO,SAIpB,IAAKpS,EAAE,EAAGkS,MAAQ,EAAGlS,EAAIoS,QAASF,QAAS,CACvCF,EAAItM,IAAIxE,WAAWgR,MACnB,KAAKF,EAAI,SAAY,OAAWE,MAAM,EAAIC,QAAU,CAChDF,GAAKvM,IAAIxE,WAAWgR,MAAM,EAC1B,KAAKD,GAAK,SAAY,MAAQ,CAC1BD,EAAI,OAAYA,EAAI,OAAW,KAAOC,GAAK,MAC3CC,UAGR,GAAIF,EAAI,IAAM,CAEVD,IAAI/R,KAAOgS,MACR,IAAIA,EAAI,KAAO,CAElBD,IAAI/R,KAAO,IAAQgS,IAAM,CACzBD,KAAI/R,KAAO,IAAQgS,EAAI,OACpB,IAAIA,EAAI,MAAS,CAEpBD,IAAI/R,KAAO,IAAQgS,IAAM,EACzBD,KAAI/R,KAAO,IAAQgS,IAAM,EAAI,EAC7BD,KAAI/R,KAAO,IAAQgS,EAAI,OACpB,CAEHD,IAAI/R,KAAO,IAAQgS,IAAM,EACzBD,KAAI/R,KAAO,IAAQgS,IAAM,GAAK,EAC9BD,KAAI/R,KAAO,IAAQgS,IAAM,EAAI,EAC7BD,KAAI/R,KAAO,IAAQgS,EAAI,IAI/B,MAAOD,KASX,IAAIM,YAAa,SAASN,IAAKO,KAC3B,GAAIC,IAEJD,KAAMA,KAAOP,IAAI5R,MACjB,IAAImS,IAAMP,IAAI5R,OAAQ,CAAEmS,IAAMP,IAAI5R,OAGlCoS,IAAMD,IAAI,CACV,OAAOC,KAAO,IAAMR,IAAIQ,KAAO,OAAU,IAAM,CAAEA,MAIjD,GAAIA,IAAM,EAAG,CAAE,MAAOD,KAItB,GAAIC,MAAQ,EAAG,CAAE,MAAOD,KAExB,MAAQC,KAAMX,SAASG,IAAIQ,MAAQD,IAAOC,IAAMD,IAIpD,IAAIE,YAAa,SAAUT,KACvB,GAAIrM,KAAK1F,EAAGsK,IAAK0H,EAAGS,KACpB,IAAIC,KAAMX,IAAI5R,MAKd,IAAIwS,UAAW,GAAId,OAAMa,IAAI,EAE7B,KAAKpI,IAAI,EAAGtK,EAAE,EAAGA,EAAE0S,KAAM,CACrBV,EAAID,IAAI/R,IAER,IAAIgS,EAAI,IAAM,CAAEW,SAASrI,OAAS0H,CAAG,UAErCS,MAAQb,SAASI,EAEjB,IAAIS,MAAQ,EAAG,CAAEE,SAASrI,OAAS,KAAQtK,IAAKyS,MAAM,CAAG,UAGzDT,GAAKS,QAAU,EAAI,GAAOA,QAAU,EAAI,GAAO,CAE/C,OAAOA,MAAQ,GAAKzS,EAAI0S,IAAK,CACzBV,EAAKA,GAAK,EAAMD,IAAI/R,KAAO,EAC3ByS,SAIJ,GAAIA,MAAQ,EAAG,CAAEE,SAASrI,OAAS,KAAQ,UAE3C,GAAI0H,EAAI,MAAS,CACbW,SAASrI,OAAS0H,MACf,CACHA,GAAK,KACLW,UAASrI,OAAS,MAAW0H,GAAK,GAAM,IACxCW,UAASrI,OAAS,MAAU0H,EAAI,MAKxC,GAAIW,SAASxS,SAAWmK,IAAK,CACzB,GAAGqI,SAASlB,SAAU,CAClBkB,SAAWA,SAASlB,SAAS,EAAGnH,SAC7B,CACHqI,SAASxS,OAASmK,KAK1B,MAAOtH,OAAM4P,kBAAkBD,UAanC5T,SAAQyL,WAAa,QAASA,YAAW9E,KACrC,GAAI+B,QAAQyC,WAAY,CACpB,MAAOR,YAAWhE,IAAK,SAG3B,MAAOoM,YAAWpM,KAUtB3G,SAAQwL,WAAa,QAASA,YAAWwH,KACrC,GAAItK,QAAQyC,WAAY,CACpB,MAAOlH,OAAMyB,YAAY,aAAcsN,KAAKc,SAAS,SAGzDd,IAAM/O,MAAMyB,YAAYgD,QAAQiJ,WAAa,aAAe,QAASqB,IAMrE,IAAIxN,WAAauO,EAAI,EAAGJ,IAAMX,IAAI5R,OAAQ4S,MAAQ,KAClD,OAAOD,EAAIJ,IAAK,CACZ,GAAIM,cAAeX,WAAWN,IAAKkB,KAAKC,IAAIJ,EAAIC,MAAOL,KACvD,IAAIjL,QAAQiJ,WAAY,CACpBnM,OAAOyJ,KAAKwE,WAAWT,IAAIN,SAASqB,EAAGE,oBACpC,CACHzO,OAAOyJ,KAAKwE,WAAWT,IAAIzI,MAAMwJ,EAAGE,gBAExCF,EAAIE,aAER,MAAOzO,QAAO+L,KAAK,OAKpBb,eAAe,GAAGvH,YAAY,GAAGzE,UAAU,KAAK0P,IAAI,SAAS9S,QAAQrB,OAAOD,SAC/E,YACA,IAAI0I,SAAUpH,QAAQ,YACtB,IAAIsH,cAAetH,QAAQ,iBAC3B,IAAIqJ,YAAarJ,QAAQ,eAMzBtB,SAAQ0G,cAAgB,SAASC,KAC7B,GAAInB,QAAS,EACb,KAAK,GAAIvE,GAAI,EAAGA,EAAI0F,IAAIvF,OAAQH,IAAK,CACjCuE,QAAU/C,OAAOC,aAAaiE,IAAIxE,WAAWlB,GAAK,KAEtD,MAAOuE,QAEXxF,SAAQiH,iBAAmB,SAASD,QAChChH,QAAQmH,aAAa,OAErB,KAEI,MAAO,IAAI0K,OAAM7K,SACbI,KAAM,oBAGd,MAAOrH,GAEH,IAEI,GAAI+R,SAAUzR,OAAO0R,aAAe1R,OAAO2R,mBAAqB3R,OAAO4R,gBAAkB5R,OAAO6R,aAChG,IAAIC,SAAU,GAAIL,QAClBK,SAAQ/B,OAAOpJ,OACf,OAAOmL,SAAQC,QAAQ,mBAE3B,MAAOrS,GAGH,KAAM,IAAImB,OAAM,qCAW5B,SAASmT,UAAS5S,OACd,MAAOA,OASX,QAAS6S,mBAAkB3N,IAAKG,OAC5B,IAAK,GAAI7F,GAAI,EAAGA,EAAI0F,IAAIvF,SAAUH,EAAG,CACjC6F,MAAM7F,GAAK0F,IAAIxE,WAAWlB,GAAK,IAEnC,MAAO6F,OAQX,QAASyN,mBAAkBzN,OAUvB,GAAIkN,OAAQ,KACZ,IAAIxO,WACAmO,IAAM7M,MAAM1F,OACZgG,KAAOpH,QAAQqE,UAAUyC,OACzBiN,EAAI,EACJS,YAAc,IAChB,KACG,OAAOpN,MACJ,IAAK,aACF3E,OAAOC,aAAa+R,MAAM,KAAM,GAAI5M,YAAW,GAC/C,MACH,KAAK,aACFpF,OAAOC,aAAa+R,MAAM,KAAM9J,WAAW,GAC3C,QAEP,MAAM5K,GACLyU,YAAc,MAKjB,IAAKA,YAAa,CACf,GAAIE,WAAY,EAChB,KAAI,GAAIzT,GAAI,EAAGA,EAAI6F,MAAM1F,OAAOH,IAAK,CAClCyT,WAAajS,OAAOC,aAAaoE,MAAM7F,IAE/C,MAAOyT,WAEP,MAAOX,EAAIJ,KAAOK,MAAQ,EAAG,CACzB,IACI,GAAI5M,OAAS,SAAWA,OAAS,aAAc,CAC3C5B,OAAOyJ,KAAKxM,OAAOC,aAAa+R,MAAM,KAAM3N,MAAMyD,MAAMwJ,EAAGG,KAAKC,IAAIJ,EAAIC,MAAOL,YAE9E,CACDnO,OAAOyJ,KAAKxM,OAAOC,aAAa+R,MAAM,KAAM3N,MAAM4L,SAASqB,EAAGG,KAAKC,IAAIJ,EAAIC,MAAOL,QAEtFI,GAAKC,MAET,MAAOjU,GACHiU,MAAQE,KAAKS,MAAMX,MAAQ,IAGnC,MAAOxO,QAAO+L,KAAK,IAGvBvR,QAAQ6T,kBAAoBU,iBAS5B,SAASK,sBAAqBC,UAAWC,SACrC,IAAK,GAAI7T,GAAI,EAAGA,EAAI4T,UAAUzT,OAAQH,IAAK,CACvC6T,QAAQ7T,GAAK4T,UAAU5T,GAE3B,MAAO6T,SAIX,GAAIC,aAGJA,WAAU,WACNxE,OAAU8D,SACVvN,MAAS,SAASrF,OACd,MAAO6S,mBAAkB7S,MAAO,GAAIqR,OAAMrR,MAAML,UAEpDqQ,YAAe,SAAShQ,OACpB,MAAOsT,WAAU,UAAU,cAActT,OAAOuF,QAEpD2K,WAAc,SAASlQ,OACnB,MAAO6S,mBAAkB7S,MAAO,GAAIoG,YAAWpG,MAAML,UAEzD+J,WAAc,SAAS1J,OACnB,MAAO6S,mBAAkB7S,MAAOkJ,WAAWlJ,MAAML,UAKzD2T,WAAU,UACNxE,OAAUgE,kBACVzN,MAASuN,SACT5C,YAAe,SAAShQ,OACpB,MAAO,IAAKoG,YAAWpG,OAAQuF,QAEnC2K,WAAc,SAASlQ,OACnB,MAAO,IAAIoG,YAAWpG,QAE1B0J,WAAc,SAAS1J,OACnB,MAAOkJ,YAAWlJ,QAK1BsT,WAAU,gBACNxE,OAAU,SAAS9O,OACf,MAAO8S,mBAAkB,GAAI1M,YAAWpG,SAE5CqF,MAAS,SAASrF,OACd,MAAOmT,sBAAqB,GAAI/M,YAAWpG,OAAQ,GAAIqR,OAAMrR,MAAMuT,cAEvEvD,YAAe4C,SACf1C,WAAc,SAASlQ,OACnB,MAAO,IAAIoG,YAAWpG,QAE1B0J,WAAc,SAAS1J,OACnB,MAAOkJ,YAAW,GAAI9C,YAAWpG,SAKzCsT,WAAU,eACNxE,OAAUgE,kBACVzN,MAAS,SAASrF,OACd,MAAOmT,sBAAqBnT,MAAO,GAAIqR,OAAMrR,MAAML,UAEvDqQ,YAAe,SAAShQ,OACpB,MAAOA,OAAMuF,QAEjB2K,WAAc0C,SACdlJ,WAAc,SAAS1J,OACnB,MAAOkJ,YAAWlJ,QAK1BsT,WAAU,eACNxE,OAAUgE,kBACVzN,MAAS,SAASrF,OACd,MAAOmT,sBAAqBnT,MAAO,GAAIqR,OAAMrR,MAAML,UAEvDqQ,YAAe,SAAShQ,OACpB,MAAOsT,WAAU,cAAc,cAActT,OAAOuF,QAExD2K,WAAc,SAASlQ,OACnB,MAAOmT,sBAAqBnT,MAAO,GAAIoG,YAAWpG,MAAML,UAE5D+J,WAAckJ,SAWlBrU,SAAQ0F,YAAc,SAASwB,WAAYzF,OACvC,IAAKA,MAAO,CAGRA,MAAQ,GAEZ,IAAKyF,WAAY,CACb,MAAOzF,OAEXzB,QAAQmH,aAAaD,WACrB,IAAI+N,WAAYjV,QAAQqE,UAAU5C,MAClC,IAAI+D,QAASuP,UAAUE,WAAW/N,YAAYzF,MAC9C,OAAO+D,QASXxF,SAAQqE,UAAY,SAAS5C,OACzB,SAAWA,SAAU,SAAU,CAC3B,MAAO,SAEX,GAAIyT,OAAO/R,UAAU2Q,SAAS3S,KAAKM,SAAW,iBAAkB,CAC5D,MAAO,QAEX,GAAIiH,QAAQyC,YAAcR,WAAWV,KAAKxI,OAAQ,CAC9C,MAAO,aAEX,GAAIiH,QAAQiJ,YAAclQ,gBAAiBoG,YAAY,CACnD,MAAO,aAEX,GAAIa,QAAQ+I,aAAehQ,gBAAiBiQ,aAAa,CACrD,MAAO,eASf1R,SAAQmH,aAAe,SAASC,MAC5B,GAAI+N,WAAYzM,QAAQtB,KAAK+I,cAC7B,KAAKgF,UAAW,CACZ,KAAM,IAAIjU,OAAMkG,KAAO,sCAG/BpH,SAAQqH,iBAAmB,KAC3BrH,SAAQsH,kBAAoB,CAO5BtH,SAAQuH,OAAS,SAASZ,KACtB,GAAIyO,KAAM,GACNC,KAAMpU,CACV,KAAKA,EAAI,EAAGA,GAAK0F,KAAO,IAAIvF,OAAQH,IAAK,CACrCoU,KAAO1O,IAAIxE,WAAWlB,EACtBmU,MAAO,OAASC,KAAO,GAAK,IAAM,IAAMA,KAAKvB,SAAS,IAAIpH;CAE9D,MAAO0I,KAQXpV,SAAQwH,gBAAkB,SAASvE,mBAC/B,IAAK,GAAIqS,UAAU1M,cAAc,CAC7B,IAAKA,aAAa4D,eAAe8I,QAAS,CACtC,SAEJ,GAAI1M,aAAa0M,QAAQ9R,QAAUP,kBAAmB,CAClD,MAAO2F,cAAa0M,SAG5B,MAAO,MAQXtV,SAAQyH,SAAW,SAAUC,QACzB,MAAOwN,QAAO/R,UAAU2Q,SAAS3S,KAAKuG,UAAY,qBAInDoB,iBAAiB,EAAE4H,eAAe,GAAGvH,YAAY,KAAKoM,IAAI,SAASjU,QAAQrB,OAAOD,SACrF,YACA,IAAIoR,cAAe9P,QAAQ,iBAC3B,IAAIgJ,kBAAmBhJ,QAAQ,qBAC/B,IAAI+I,kBAAmB/I,QAAQ,qBAC/B,IAAI2C,OAAQ3C,QAAQ,UACpB,IAAIuE,KAAMvE,QAAQ,cAClB,IAAIkU,UAAWlU,QAAQ,aACvB,IAAIoH,SAAUpH,QAAQ,YACtB,IAAImU,YAAanU,QAAQ,WAQzB,SAAS+H,YAAWxE,KAAM6Q,aACtB7S,KAAKwF,QACLxF,MAAK6S,YAAcA,WACnB,IAAI7Q,KAAM,CACNhC,KAAK0F,KAAK1D,OAGlBwE,WAAWlG,WAMPwS,eAAgB,SAASC,mBACrB,GAAIlL,WAAY7H,KAAKgT,OAAOpQ,WAAW,EACvC,IAAIiF,YAAckL,kBAAmB,CACjC,KAAM,IAAI1U,OAAM,+CAAiD,IAAM+C,MAAMsD,OAAOmD,WAAa,cAAgBzG,MAAMsD,OAAOqO,mBAAqB,OAM3JE,sBAAuB,WACnBjT,KAAKkT,WAAalT,KAAKgT,OAAOvQ,QAAQ,EACtCzC,MAAKmT,wBAA0BnT,KAAKgT,OAAOvQ,QAAQ,EACnDzC,MAAKoT,4BAA8BpT,KAAKgT,OAAOvQ,QAAQ,EACvDzC,MAAKqT,kBAAoBrT,KAAKgT,OAAOvQ,QAAQ,EAC7CzC,MAAKsT,eAAiBtT,KAAKgT,OAAOvQ,QAAQ,EAC1CzC,MAAKuT,iBAAmBvT,KAAKgT,OAAOvQ,QAAQ,EAE5CzC,MAAKwT,iBAAmBxT,KAAKgT,OAAOvQ,QAAQ,EAI5CzC,MAAK+G,WAAa/G,KAAKgT,OAAOpQ,WAAW5C,KAAKwT,iBAG9CxT,MAAK+G,WAAa6L,WAAWjK,WAAW3I,KAAK+G,aAQjD0M,2BAA4B,WACxBzT,KAAK0T,sBAAwB1T,KAAKgT,OAAOvQ,QAAQ,EACjDzC,MAAK2T,cAAgB3T,KAAKgT,OAAOpQ,WAAW,EAC5C5C,MAAK4T,cAAgB5T,KAAKgT,OAAOvQ,QAAQ,EACzCzC,MAAKkT,WAAalT,KAAKgT,OAAOvQ,QAAQ,EACtCzC,MAAKmT,wBAA0BnT,KAAKgT,OAAOvQ,QAAQ,EACnDzC,MAAKoT,4BAA8BpT,KAAKgT,OAAOvQ,QAAQ,EACvDzC,MAAKqT,kBAAoBrT,KAAKgT,OAAOvQ,QAAQ,EAC7CzC,MAAKsT,eAAiBtT,KAAKgT,OAAOvQ,QAAQ,EAC1CzC,MAAKuT,iBAAmBvT,KAAKgT,OAAOvQ,QAAQ,EAE5CzC,MAAK6T,sBACL,IAAIC,eAAgB9T,KAAK0T,sBAAwB,GAC7CzR,MAAQ,EACR8R,aACAC,iBACAC,eACJ,OAAOhS,MAAQ6R,cAAe,CAC1BC,aAAe/T,KAAKgT,OAAOvQ,QAAQ,EACnCuR,kBAAmBhU,KAAKgT,OAAOvQ,QAAQ,EACvCwR,iBAAkBjU,KAAKgT,OAAOpQ,WAAWoR,iBACzChU,MAAK6T,oBAAoBE,eACrBG,GAAIH,aACJxV,OAAQyV,iBACRG,MAAOF,mBAOnBG,kCAAmC,WAC/BpU,KAAKqU,6BAA+BrU,KAAKgT,OAAOvQ,QAAQ,EACxDzC,MAAKsU,mCAAqCtU,KAAKgT,OAAOvQ,QAAQ,EAC9DzC,MAAKuU,WAAavU,KAAKgT,OAAOvQ,QAAQ,EACtC,IAAIzC,KAAKuU,WAAa,EAAG,CACrB,KAAM,IAAIlW,OAAM,yCAMxBmW,eAAgB,WACZ,GAAIpW,GAAGsI,IACP,KAAKtI,EAAI,EAAGA,EAAI4B,KAAKwF,MAAMjH,OAAQH,IAAK,CACpCsI,KAAO1G,KAAKwF,MAAMpH,EAClB4B,MAAKgT,OAAO1Q,SAASoE,KAAK+N,kBAC1BzU,MAAK8S,eAAe9P,IAAI2I,kBACxBjF,MAAKgO,cAAc1U,KAAKgT,OACxBtM,MAAKiO,eAMbC,eAAgB,WACZ,GAAIlO,KAEJ1G,MAAKgT,OAAO1Q,SAAStC,KAAKuT,iBAC1B,OAAOvT,KAAKgT,OAAOpQ,WAAW,KAAOI,IAAI6I,oBAAqB,CAC1DnF,KAAO,GAAIiM,WACPkC,MAAO7U,KAAK6U,OACb7U,KAAK6S,YACRnM,MAAKoO,gBAAgB9U,KAAKgT,OAC1BhT,MAAKwF,MAAM4G,KAAK1F,QAMxBqO,iBAAkB,WACd,GAAI5S,QAASnC,KAAKgT,OAAOjQ,qBAAqBC,IAAIoK,sBAClD,IAAIjL,UAAY,EAAG,CACf,KAAM,IAAI9D,OAAM,uDAEpB2B,KAAKgT,OAAO1Q,SAASH,OACrBnC,MAAK8S,eAAe9P,IAAIoK,sBACxBpN,MAAKiT,uBAaL,IAAIjT,KAAKkT,aAAe9R,MAAMoD,kBAAoBxE,KAAKmT,0BAA4B/R,MAAMoD,kBAAoBxE,KAAKoT,8BAAgChS,MAAMoD,kBAAoBxE,KAAKqT,oBAAsBjS,MAAMoD,kBAAoBxE,KAAKsT,iBAAmBlS,MAAMqD,kBAAoBzE,KAAKuT,mBAAqBnS,MAAMqD,iBAAkB,CACjUzE,KAAK6U,MAAQ,IAYb1S,QAASnC,KAAKgT,OAAOjQ,qBAAqBC,IAAImL,gCAC9C,IAAIhM,UAAY,EAAG,CACf,KAAM,IAAI9D,OAAM,yEAEpB2B,KAAKgT,OAAO1Q,SAASH,OACrBnC,MAAK8S,eAAe9P,IAAImL,gCACxBnO,MAAKoU,mCAGLpU,MAAKgT,OAAO1Q,SAAStC,KAAKsU,mCAC1BtU,MAAK8S,eAAe9P,IAAIoL,4BACxBpO,MAAKyT,+BAGbuB,cAAe,SAAShT,MACpB,GAAIuC,MAAOnD,MAAMI,UAAUQ,KAC3B,IAAIuC,OAAS,WAAasB,QAAQiJ,WAAY,CAC1C9O,KAAKgT,OAAS,GAAIzE,cAAavM,KAAMhC,KAAK6S,YAAYhM,2BAErD,IAAItC,OAAS,aAAc,CAC5BvE,KAAKgT,OAAS,GAAIvL,kBAAiBzF,UAElC,CACDhC,KAAKgT,OAAS,GAAIxL,kBAAiBpG,MAAMyB,YAAY,aAAcb,SAO3E0D,KAAM,SAAS1D,MACXhC,KAAKgV,cAAchT,KACnBhC,MAAK+U,kBACL/U,MAAK4U,gBACL5U,MAAKwU,kBAIbpX,QAAOD,QAAUqJ,aAEdyO,qBAAqB,GAAG5O,WAAW,GAAGyH,cAAc,GAAGoH,iBAAiB,GAAG5O,YAAY,GAAGqB,qBAAqB,GAAG9F,UAAU,GAAGsT,aAAa,KAAKC,IAAI,SAAS3W,QAAQrB,OAAOD,SAChL,YACA,IAAIoR,cAAe9P,QAAQ,iBAC3B,IAAI2C,OAAQ3C,QAAQ,UACpB,IAAIsB,kBAAmBtB,QAAQ,qBAC/B,IAAImU,YAAanU,QAAQ,WAQzB,SAASkU,UAASpN,QAASsN,aACvB7S,KAAKuF,QAAUA,OACfvF,MAAK6S,YAAcA,YAEvBF,SAASrS,WAKL+U,YAAa,WAET,OAAQrV,KAAKsV,QAAU,KAAY,GAMvCC,QAAS,WAEL,OAAQvV,KAAKsV,QAAU,QAAY,MASvCE,yBAA0B,SAASxC,OAAQyC,KAAMlX,QAC7C,MAAO,YACH,GAAImX,eAAgB1C,OAAO/Q,KAC3B+Q,QAAO1Q,SAASmT,KAChB,IAAIE,oBAAqB3C,OAAOlQ,SAASvE,OACzCyU,QAAO1Q,SAASoT,cAEhB,OAAOC,sBAYfC,eAAgB,SAAS5C,OAAQyC,KAAMlX,OAAQmF,YAAaxD,kBACxD,MAAO,YAEH,GAAIyV,oBAAqBvU,MAAMyB,YAAYa,YAAY1C,oBAAqBhB,KAAKQ,uBACjF,IAAIqV,sBAAuBnS,YAAY5C,WAAW6U,mBAElD,IAAIE,qBAAqBtX,SAAW2B,iBAAkB,CAClD,KAAM,IAAI7B,OAAM,yCAGpB,MAAOwX,wBAOfnB,cAAe,SAAS1B,QACpB,GAAItP,aAAaoS,sBAOjB9C,QAAOzQ,KAAK,GAYZvC,MAAK+V,eAAiB/C,OAAOvQ,QAAQ,EACrCqT,wBAAyB9C,OAAOvQ,QAAQ,EACxCzC,MAAK2G,SAAWqM,OAAOpQ,WAAW5C,KAAK+V,eACvC/C,QAAOzQ,KAAKuT,uBAEZ,IAAI9V,KAAKC,iBAAmB,GAAKD,KAAKE,mBAAqB,EAAG,CAC1D,KAAM,IAAI7B,OAAM,oFAAsF,oDAG1GqF,YAActC,MAAMuD,gBAAgB3E,KAAKI,kBACzC,IAAIsD,cAAgB,KAAM,CACtB,KAAM,IAAIrF,OAAM,+BAAiC+C,MAAMsD,OAAO1E,KAAKI,mBAAqB,0BAA4BJ,KAAK2G,SAAW,KAExI3G,KAAK4G,aAAe,GAAI7G,iBACxBC,MAAK4G,aAAa3G,eAAiBD,KAAKC,cACxCD,MAAK4G,aAAa1G,iBAAmBF,KAAKE,gBAC1CF,MAAK4G,aAAazG,MAAQH,KAAKG,KAC/BH,MAAK4G,aAAaxG,kBAAoBJ,KAAKI,iBAC3CJ,MAAK4G,aAAapG,qBAAuBR,KAAKwV,yBAAyBxC,OAAQA,OAAO/Q,MAAOjC,KAAKC,eAAgByD,YAClH1D,MAAK4G,aAAarG,WAAaP,KAAK4V,eAAe5C,OAAQA,OAAO/Q,MAAOjC,KAAKC,eAAgByD,YAAa1D,KAAKE,iBAGhH,IAAIF,KAAK6S,YAAYmD,WAAY,CAC7BhW,KAAK4G,aAAexF,MAAMyB,YAAY,SAAU7C,KAAK4G,aAAarG,aAClE,IAAIqS,WAAWzS,MAAMH,KAAK4G,gBAAkB5G,KAAKG,MAAO,CACpD,KAAM,IAAI9B,OAAM,qCAS5ByW,gBAAiB,SAAS9B,QACtBhT,KAAK2T,cAAgBX,OAAOpQ,WAAW,EACvC5C,MAAK4T,cAAgBZ,OAAOvQ,QAAQ,EACpCzC,MAAKsV,QAAUtC,OAAOvQ,QAAQ,EAC9BzC,MAAKI,kBAAoB4S,OAAOpQ,WAAW,EAC3C5C,MAAKyD,KAAOuP,OAAO/P,UACnBjD,MAAKG,MAAQ6S,OAAOvQ,QAAQ,EAC5BzC,MAAKC,eAAiB+S,OAAOvQ,QAAQ,EACrCzC,MAAKE,iBAAmB8S,OAAOvQ,QAAQ,EACvCzC,MAAK+V,eAAiB/C,OAAOvQ,QAAQ,EACrCzC,MAAKiW,kBAAoBjD,OAAOvQ,QAAQ,EACxCzC,MAAKkW,kBAAoBlD,OAAOvQ,QAAQ,EACxCzC,MAAKmW,gBAAkBnD,OAAOvQ,QAAQ,EACtCzC,MAAKoW,uBAAyBpD,OAAOvQ,QAAQ,EAC7CzC,MAAKqW,uBAAyBrD,OAAOvQ,QAAQ,EAC7CzC,MAAKyU,kBAAoBzB,OAAOvQ,QAAQ,EAExC,IAAIzC,KAAKqV,cAAe,CACpB,KAAM,IAAIhX,OAAM,mCAGpB2B,KAAK2G,SAAWqM,OAAOpQ,WAAW5C,KAAK+V,eACvC/V,MAAKsW,gBAAgBtD,OACrBhT,MAAKuW,qBAAqBvD,OAC1BhT,MAAK8G,YAAckM,OAAOpQ,WAAW5C,KAAKkW,kBAG1ClW,MAAKuD,IAAMvD,KAAKqW,uBAAyB,GAAa,KAAO,OAMjEE,qBAAsB,SAASvD,QAE3B,IAAKhT,KAAKgL,YAAY,GAAS,CAC3B,OAIJ,GAAIwL,aAAc,GAAIjI,cAAavO,KAAKgL,YAAY,GAAQmJ,MAI5D,IAAInU,KAAKE,mBAAqBkB,MAAMqD,iBAAkB,CAClDzE,KAAKE,iBAAmBsW,YAAY/T,QAAQ,GAEhD,GAAIzC,KAAKC,iBAAmBmB,MAAMqD,iBAAkB,CAChDzE,KAAKC,eAAiBuW,YAAY/T,QAAQ,GAE9C,GAAIzC,KAAKyU,oBAAsBrT,MAAMqD,iBAAkB,CACnDzE,KAAKyU,kBAAoB+B,YAAY/T,QAAQ,GAEjD,GAAIzC,KAAKmW,kBAAoB/U,MAAMqD,iBAAkB,CACjDzE,KAAKmW,gBAAkBK,YAAY/T,QAAQ,KAOnD6T,gBAAiB,SAAStD,QACtB,GAAIyD,OAAQzD,OAAO/Q,MACf8R,aACAC,iBACAC,eAEJjU,MAAKgL,YAAchL,KAAKgL,eAExB,OAAOgI,OAAO/Q,MAAQwU,MAAQzW,KAAKiW,kBAAmB,CAClDlC,aAAef,OAAOvQ,QAAQ,EAC9BuR,kBAAmBhB,OAAOvQ,QAAQ,EAClCwR,iBAAkBjB,OAAOpQ,WAAWoR,iBAEpChU,MAAKgL,YAAY+I,eACbG,GAAIH,aACJxV,OAAQyV,iBACRG,MAAOF,mBAOnBU,WAAY,WACR,GAAI3U,KAAKuV,UAAW,CAChBvV,KAAK2G,SAAWiM,WAAWjK,WAAW3I,KAAK2G,SAC3C3G,MAAK8G,YAAc8L,WAAWjK,WAAW3I,KAAK8G,iBAC3C,CACH,GAAI4P,OAAQ1W,KAAK2W,2BACjB,IAAID,QAAU,KAAM,CAChB1W,KAAK2G,SAAW+P,MAEpB,GAAIE,UAAW5W,KAAK6W,8BACpB,IAAID,WAAa,KAAM,CACnB5W,KAAK8G,YAAc8P,YAS/BD,0BAA2B,WACvB,GAAIG,YAAa9W,KAAKgL,YAAY,MAClC,IAAI8L,WAAY,CACZ,GAAIN,aAAc,GAAIjI,cAAauI,WAAW3C,MAG9C,IAAIqC,YAAY/T,QAAQ,KAAO,EAAG,CAC9B,MAAO,MAIX,GAAImQ,WAAWzS,MAAMH,KAAK2G,YAAc6P,YAAY/T,QAAQ,GAAI,CAC5D,MAAO,MAGX,MAAOmQ,YAAWjK,WAAW6N,YAAY5T,WAAWkU,WAAWvY,OAAS,IAE5E,MAAO,OAOXsY,6BAA8B,WAC1B,GAAIE,eAAgB/W,KAAKgL,YAAY,MACrC,IAAI+L,cAAe,CACf,GAAIP,aAAc,GAAIjI,cAAawI,cAAc5C,MAGjD,IAAIqC,YAAY/T,QAAQ,KAAO,EAAG,CAC9B,MAAO,MAIX,GAAImQ,WAAWzS,MAAMH,KAAK8G,eAAiB0P,YAAY/T,QAAQ,GAAI,CAC/D,MAAO,MAGX,MAAOmQ,YAAWjK,WAAW6N,YAAY5T,WAAWmU,cAAcxY,OAAS,IAE/E,MAAO,OAGfnB,QAAOD,QAAUwV,WAEdhF,qBAAqB,EAAEtH,WAAW,GAAG6O,iBAAiB,GAAGrT,UAAU,KAAKmV,IAAI,SAASvY,QAAQrB,OAAOD,SAEvG,YAEA,IAAI8Z,QAAYxY,QAAQ,sBAAsBwY,MAE9C,IAAIC,SAAYzY,QAAQ,gBACxB,IAAI0Y,SAAY1Y,QAAQ,gBACxB,IAAI2Y,WAAY3Y,QAAQ,uBAExB,IAAI0G,QAEJ8R,QAAO9R,KAAM+R,QAASC,QAASC,UAE/Bha,QAAOD,QAAUgI,OACdkS,gBAAgB,GAAGC,gBAAgB,GAAGC,qBAAqB,GAAGC,uBAAuB,KAAKC,IAAI,SAAShZ,QAAQrB,OAAOD,SACzH,YAGA,IAAIua,cAAejZ,QAAQ,oBAC3B,IAAI2C,OAAQ3C,QAAQ,iBACpB,IAAIkZ,SAAUlZ,QAAQ,kBACtB,IAAImZ,KAAMnZ,QAAQ,kBAClB,IAAIoZ,SAAUpZ,QAAQ,iBAMtB,IAAIqZ,YAAkB,CACtB,IAAIC,UAAkB,CAEtB,IAAIC,MAAkB,CACtB,IAAIC,cAAkB,CAEtB,IAAIC,wBAAyB,CAE7B,IAAIC,oBAAwB,CAE5B,IAAIC,YAAc,CA2FlB,IAAIC,SAAU,SAAS9S,SAErBvF,KAAKuF,QAAUnE,MAAM6V,QACnBqB,MAAOJ,sBACPzF,OAAQ2F,WACRG,UAAW,MACXC,WAAY,GACZC,SAAU,EACVC,SAAUP,mBACVQ,GAAI,IACHpT,YAEH,IAAIqT,KAAM5Y,KAAKuF,OAEf,IAAIqT,IAAIC,KAAQD,IAAIJ,WAAa,EAAI,CACnCI,IAAIJ,YAAcI,IAAIJ,eAGnB,IAAII,IAAIE,MAASF,IAAIJ,WAAa,GAAOI,IAAIJ,WAAa,GAAK,CAClEI,IAAIJ,YAAc,GAGpBxY,KAAK+Y,IAAS,CACd/Y,MAAK4X,IAAS,EACd5X,MAAKgZ,MAAS,KACdhZ,MAAKiZ,SAELjZ,MAAKkZ,KAAO,GAAIrB,QAChB7X,MAAKkZ,KAAKC,UAAY,CAEtB,IAAIC,QAAS1B,aAAa2B,aACxBrZ,KAAKkZ,KACLN,IAAIN,MACJM,IAAInG,OACJmG,IAAIJ,WACJI,IAAIH,SACJG,IAAIF,SAGN,IAAIU,SAAWpB,KAAM,CACnB,KAAM,IAAI3Z,OAAMuZ,IAAIwB,SAGtB,GAAIR,IAAInN,OAAQ,CACdiM,aAAa4B,iBAAiBtZ,KAAKkZ,KAAMN,IAAInN,SAgCjD4M,SAAQ/X,UAAU8L,KAAO,SAASpK,KAAMuX,MACtC,GAAIL,MAAOlZ,KAAKkZ,IAChB,IAAIX,WAAYvY,KAAKuF,QAAQgT,SAC7B,IAAIa,QAAQI,KAEZ,IAAIxZ,KAAKgZ,MAAO,CAAE,MAAO,OAEzBQ,MAASD,SAAWA,KAAQA,KAASA,OAAS,KAAQxB,SAAWD,UAGjE,UAAW9V,QAAS,SAAU,CAE5BkX,KAAKta,MAAQ+Y,QAAQzH,WAAWlO,UAC3B,CACLkX,KAAKta,MAAQoD,KAGfkX,KAAKO,QAAU,CACfP,MAAKQ,SAAWR,KAAKta,MAAML,MAE3B,GAAG,CACD,GAAI2a,KAAKC,YAAc,EAAG,CACxBD,KAAKpa,OAAS,GAAIsC,OAAMuY,KAAKpB,UAC7BW,MAAKU,SAAW,CAChBV,MAAKC,UAAYZ,UAEnBa,OAAS1B,aAAaR,QAAQgC,KAAMM,MAEpC,IAAIJ,SAAWnB,cAAgBmB,SAAWpB,KAAM,CAC9ChY,KAAK6Z,MAAMT,OACXpZ,MAAKgZ,MAAQ,IACb,OAAO,OAET,GAAIE,KAAKC,YAAc,GAAMD,KAAKQ,WAAa,GAAKF,QAAUzB,SAAW,CACvE,GAAI/X,KAAKuF,QAAQoT,KAAO,SAAU,CAChC3Y,KAAK8Z,OAAOnC,QAAQoC,cAAc3Y,MAAM4Y,UAAUd,KAAKpa,OAAQoa,KAAKU,gBAC/D,CACL5Z,KAAK8Z,OAAO1Y,MAAM4Y,UAAUd,KAAKpa,OAAQoa,KAAKU,oBAG1CV,KAAKQ,SAAW,GAAKR,KAAKC,YAAc,IAAMC,SAAWnB,aAGnE,IAAIuB,QAAUzB,SAAU,CACtBqB,OAAS1B,aAAauC,WAAWja,KAAKkZ,KACtClZ,MAAK6Z,MAAMT,OACXpZ,MAAKgZ,MAAQ,IACb,OAAOI,UAAWpB,KAGpB,MAAO,MAaTK,SAAQ/X,UAAUwZ,OAAS,SAAS3I,OAClCnR,KAAKiZ,OAAO7M,KAAK+E,OAanBkH,SAAQ/X,UAAUuZ,MAAQ,SAAST,QAEjC,GAAIA,SAAWpB,KAAM,CACnB,GAAIhY,KAAKuF,QAAQoT,KAAO,SAAU,CAChC3Y,KAAK2C,OAAS3C,KAAKiZ,OAAOvK,KAAK,QAC1B,CACL1O,KAAK2C,OAASvB,MAAM8Y,cAAcla,KAAKiZ,SAG3CjZ,KAAKiZ,SACLjZ,MAAK+Y,IAAMK,MACXpZ,MAAK4X,IAAM5X,KAAKkZ,KAAKtB,IAqCvB,SAASV,SAAQtY,MAAO2G,SACtB,GAAI4U,UAAW,GAAI9B,SAAQ9S,QAE3B4U,UAAS/N,KAAKxN,MAAO,KAGrB,IAAIub,SAASpB,IAAK,CAAE,KAAMoB,UAASvC,IAEnC,MAAOuC,UAASxX,OAYlB,QAASyC,YAAWxG,MAAO2G,SACzBA,QAAUA,WACVA,SAAQsT,IAAM,IACd,OAAO3B,SAAQtY,MAAO2G,SAYxB,QAASuT,MAAKla,MAAO2G,SACnBA,QAAUA,WACVA,SAAQuT,KAAO,IACf,OAAO5B,SAAQtY,MAAO2G,SAIxBpI,QAAQkb,QAAUA,OAClBlb,SAAQ+Z,QAAUA,OAClB/Z,SAAQiI,WAAaA,UACrBjI,SAAQ2b,KAAOA,OACZsB,iBAAiB,GAAGC,kBAAkB,GAAGC,oBAAoB,GAAGC,kBAAkB,GAAGC,iBAAiB,KAAKC,IAAI,SAAShc,QAAQrB,OAAOD,SAC1I,YAGA,IAAIud,cAAejc,QAAQ,oBAC3B,IAAI2C,OAAQ3C,QAAQ,iBACpB,IAAIkZ,SAAUlZ,QAAQ,kBACtB,IAAI2R,GAAI3R,QAAQ,mBAChB,IAAImZ,KAAMnZ,QAAQ,kBAClB,IAAIoZ,SAAUpZ,QAAQ,iBACtB,IAAIkc,UAAWlc,QAAQ,kBA+EvB,IAAImc,SAAU,SAASrV,SAErBvF,KAAKuF,QAAUnE,MAAM6V,QACnBsB,UAAW,MACXC,WAAY,EACZG,GAAI,IACHpT,YAEH,IAAIqT,KAAM5Y,KAAKuF,OAIf,IAAIqT,IAAIC,KAAQD,IAAIJ,YAAc,GAAOI,IAAIJ,WAAa,GAAK,CAC7DI,IAAIJ,YAAcI,IAAIJ,UACtB,IAAII,IAAIJ,aAAe,EAAG,CAAEI,IAAIJ,YAAc,IAIhD,GAAKI,IAAIJ,YAAc,GAAOI,IAAIJ,WAAa,MACzCjT,SAAWA,QAAQiT,YAAa,CACpCI,IAAIJ,YAAc,GAKpB,GAAKI,IAAIJ,WAAa,IAAQI,IAAIJ,WAAa,GAAK,CAGlD,IAAKI,IAAIJ,WAAa,MAAQ,EAAG,CAC/BI,IAAIJ,YAAc,IAItBxY,KAAK+Y,IAAS,CACd/Y,MAAK4X,IAAS,EACd5X,MAAKgZ,MAAS,KACdhZ,MAAKiZ,SAELjZ,MAAKkZ,KAAS,GAAIrB,QAClB7X,MAAKkZ,KAAKC,UAAY,CAEtB,IAAIC,QAAUsB,aAAaG,aACzB7a,KAAKkZ,KACLN,IAAIJ,WAGN,IAAIY,SAAWhJ,EAAE4H,KAAM,CACrB,KAAM,IAAI3Z,OAAMuZ,IAAIwB,SAGtBpZ,KAAKyL,OAAS,GAAIkP,SAElBD,cAAaI,iBAAiB9a,KAAKkZ,KAAMlZ,KAAKyL,QA8BhDmP,SAAQta,UAAU8L,KAAO,SAASpK,KAAMuX,MACtC,GAAIL,MAAOlZ,KAAKkZ,IAChB,IAAIX,WAAYvY,KAAKuF,QAAQgT,SAC7B,IAAIa,QAAQI,KACZ,IAAIuB,eAAeC,KAAMC,OAEzB,IAAIjb,KAAKgZ,MAAO,CAAE,MAAO,OACzBQ,MAASD,SAAWA,KAAQA,KAASA,OAAS,KAAQnJ,EAAE2H,SAAW3H,EAAE0H,UAGrE,UAAW9V,QAAS,SAAU,CAE5BkX,KAAKta,MAAQ+Y,QAAQuD,cAAclZ,UAC9B,CACLkX,KAAKta,MAAQoD,KAGfkX,KAAKO,QAAU,CACfP,MAAKQ,SAAWR,KAAKta,MAAML,MAE3B,GAAG,CACD,GAAI2a,KAAKC,YAAc,EAAG,CACxBD,KAAKpa,OAAS,GAAIsC,OAAMuY,KAAKpB,UAC7BW,MAAKU,SAAW,CAChBV,MAAKC,UAAYZ,UAGnBa,OAASsB,aAAavD,QAAQ+B,KAAM9I,EAAE0H,WAEtC,IAAIsB,SAAWhJ,EAAE6H,cAAgBmB,SAAWhJ,EAAE4H,KAAM,CAClDhY,KAAK6Z,MAAMT,OACXpZ,MAAKgZ,MAAQ,IACb,OAAO,OAGT,GAAIE,KAAKU,SAAU,CACjB,GAAIV,KAAKC,YAAc,GAAKC,SAAWhJ,EAAE6H,cAAiBiB,KAAKQ,WAAa,GAAKF,QAAUpJ,EAAE2H,SAAW,CAEtG,GAAI/X,KAAKuF,QAAQoT,KAAO,SAAU,CAEhCoC,cAAgBpD,QAAQlH,WAAWyI,KAAKpa,OAAQoa,KAAKU,SAErDoB,MAAO9B,KAAKU,SAAWmB,aACvBE,SAAUtD,QAAQ/G,WAAWsI,KAAKpa,OAAQic,cAG1C7B,MAAKU,SAAWoB,IAChB9B,MAAKC,UAAYZ,UAAYyC,IAC7B,IAAIA,KAAM,CAAE5Z,MAAM+Z,SAASjC,KAAKpa,OAAQoa,KAAKpa,OAAQic,cAAeC,KAAM,GAE1Ehb,KAAK8Z,OAAOmB,aAEP,CACLjb,KAAK8Z,OAAO1Y,MAAM4Y,UAAUd,KAAKpa,OAAQoa,KAAKU,oBAI5CV,KAAKQ,SAAW,GAAMN,SAAWhJ,EAAE6H,aAE7C,IAAImB,SAAWhJ,EAAE6H,aAAc,CAC7BuB,MAAQpJ,EAAE2H,SAGZ,GAAIyB,QAAUpJ,EAAE2H,SAAU,CACxBqB,OAASsB,aAAaU,WAAWpb,KAAKkZ,KACtClZ,MAAK6Z,MAAMT,OACXpZ,MAAKgZ,MAAQ,IACb,OAAOI,UAAWhJ,EAAE4H,KAGtB,MAAO,MAaT4C,SAAQta,UAAUwZ,OAAS,SAAS3I,OAClCnR,KAAKiZ,OAAO7M,KAAK+E,OAanByJ,SAAQta,UAAUuZ,MAAQ,SAAST,QAEjC,GAAIA,SAAWhJ,EAAE4H,KAAM,CACrB,GAAIhY,KAAKuF,QAAQoT,KAAO,SAAU,CAGhC3Y,KAAK2C,OAAS3C,KAAKiZ,OAAOvK,KAAK,QAC1B,CACL1O,KAAK2C,OAASvB,MAAM8Y,cAAcla,KAAKiZ,SAG3CjZ,KAAKiZ,SACLjZ,MAAK+Y,IAAMK,MACXpZ,MAAK4X,IAAM5X,KAAKkZ,KAAKtB,IA2CvB,SAAST,SAAQvY,MAAO2G,SACtB,GAAI8V,UAAW,GAAIT,SAAQrV,QAE3B8V,UAASjP,KAAKxN,MAAO,KAGrB,IAAIyc,SAAStC,IAAK,CAAE,KAAMsC,UAASzD,IAEnC,MAAOyD,UAAS1Y,OAYlB,QAAS0C,YAAWzG,MAAO2G,SACzBA,QAAUA,WACVA,SAAQsT,IAAM,IACd,OAAO1B,SAAQvY,MAAO2G,SAcxBpI,QAAQyd,QAAUA,OAClBzd,SAAQga,QAAUA,OAClBha,SAAQkI,WAAaA,UACrBlI,SAAQme,OAAUnE,UAEfiD,iBAAiB,GAAGC,kBAAkB,GAAGkB,mBAAmB,GAAGC,kBAAkB,GAAGC,oBAAoB,GAAGlB,kBAAkB,GAAGC,iBAAiB,KAAKkB,IAAI,SAASjd,QAAQrB,OAAOD,SACrL,YAGA,IAAIwe,gBAAoB3W,cAAe,mBACfC,eAAgB,mBAChB2W,cAAe,WAGvCze,SAAQ8Z,OAAS,SAAU4E,KACzB,GAAIC,SAAU7L,MAAM3P,UAAUoH,MAAMpJ,KAAKoL,UAAW,EACpD,OAAOoS,QAAQvd,OAAQ,CACrB,GAAIwd,QAASD,QAAQE,OACrB,KAAKD,OAAQ,CAAE,SAEf,SAAU,UAAa,SAAU,CAC/B,KAAM,IAAIE,WAAUF,OAAS,sBAG/B,IAAK,GAAIG,KAAKH,QAAQ,CACpB,GAAIA,OAAOpS,eAAeuS,GAAI,CAC5BL,IAAIK,GAAKH,OAAOG,KAKtB,MAAOL,KAKT1e,SAAQ6c,UAAY,SAAU7J,IAAKzN,MACjC,GAAIyN,IAAI5R,SAAWmE,KAAM,CAAE,MAAOyN,KAClC,GAAIA,IAAIN,SAAU,CAAE,MAAOM,KAAIN,SAAS,EAAGnN,MAC3CyN,IAAI5R,OAASmE,IACb,OAAOyN,KAIT,IAAIgM,UACFhB,SAAU,SAAUiB,KAAMC,IAAKC,SAAUxL,IAAKyL,WAC5C,GAAIF,IAAIxM,UAAYuM,KAAKvM,SAAU,CACjCuM,KAAKhU,IAAIiU,IAAIxM,SAASyM,SAAUA,SAASxL,KAAMyL,UAC/C,QAGF,IAAI,GAAIne,GAAE,EAAGA,EAAE0S,IAAK1S,IAAK,CACvBge,KAAKG,UAAYne,GAAKie,IAAIC,SAAWle,KAIzC8b,cAAe,SAASjB,QACtB,GAAI7a,GAAGoe,EAAG1L,IAAKH,IAAKQ,MAAOxO,MAG3BmO,KAAM,CACN,KAAK1S,EAAE,EAAGoe,EAAEvD,OAAO1a,OAAQH,EAAEoe,EAAGpe,IAAK,CACnC0S,KAAOmI,OAAO7a,GAAGG,OAInBoE,OAAS,GAAIqC,YAAW8L,IACxBH,KAAM,CACN,KAAKvS,EAAE,EAAGoe,EAAEvD,OAAO1a,OAAQH,EAAEoe,EAAGpe,IAAK,CACnC+S,MAAQ8H,OAAO7a,EACfuE,QAAOyF,IAAI+I,MAAOR,IAClBA,MAAOQ,MAAM5S,OAGf,MAAOoE,SAIX,IAAI8Z,YACFtB,SAAU,SAAUiB,KAAMC,IAAKC,SAAUxL,IAAKyL,WAC5C,IAAI,GAAIne,GAAE,EAAGA,EAAE0S,IAAK1S,IAAK,CACvBge,KAAKG,UAAYne,GAAKie,IAAIC,SAAWle,KAIzC8b,cAAe,SAASjB,QACtB,SAAUyD,OAAO9K,SAAUqH,SAO/B9b,SAAQwf,SAAW,SAAUC,IAC3B,GAAIA,GAAI,CACNzf,QAAQwc,KAAQ3U,UAChB7H,SAAQ0f,MAAQ5X,WAChB9H,SAAQ2f,MAAQlB,UAChBze,SAAQ8Z,OAAO9Z,QAASgf,aACnB,CACLhf,QAAQwc,KAAQ1J,KAChB9S,SAAQ0f,MAAQ5M,KAChB9S,SAAQ2f,MAAQ7M,KAChB9S,SAAQ8Z,OAAO9Z,QAASsf,YAI5Btf,SAAQwf,SAAShB,eACXoB,IAAI,SAASte,QAAQrB,OAAOD,SAElC,YAGA,IAAIiE,OAAQ3C,QAAQ,WAQpB,IAAIue,cAAe,IACnB,IAAIC,kBAAmB,IAEvB,KAAMrd,OAAOC,aAAa+R,MAAM,MAAO,IAAO,MAAMsL,IAAMF,aAAe,MACzE,IAAMpd,OAAOC,aAAa+R,MAAM,KAAM,GAAI5M,YAAW,IAAO,MAAMkY,IAAMD,iBAAmB,MAM3F,GAAIjN,UAAW,GAAI5O,OAAMuY,KAAK,IAC9B,KAAK,GAAIvb,GAAE,EAAGA,EAAE,IAAKA,IAAK,CACxB4R,SAAS5R,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EAE5F4R,SAAS,KAAKA,SAAS,KAAK,CAI5B7S,SAAQ+S,WAAa,SAAUpM,KAC7B,GAAIqM,KAAKC,EAAGC,GAAIC,MAAOlS,EAAGmS,QAAUzM,IAAIvF,OAAQiS,QAAU,CAG1D,KAAKF,MAAQ,EAAGA,MAAQC,QAASD,QAAS,CACxCF,EAAItM,IAAIxE,WAAWgR,MACnB,KAAKF,EAAI,SAAY,OAAWE,MAAM,EAAIC,QAAU,CAClDF,GAAKvM,IAAIxE,WAAWgR,MAAM,EAC1B,KAAKD,GAAK,SAAY,MAAQ,CAC5BD,EAAI,OAAYA,EAAI,OAAW,KAAOC,GAAK,MAC3CC,UAGJE,SAAWJ,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAI9DD,IAAM,GAAI/O,OAAMuY,KAAKnJ,QAGrB,KAAKpS,EAAE,EAAGkS,MAAQ,EAAGlS,EAAIoS,QAASF,QAAS,CACzCF,EAAItM,IAAIxE,WAAWgR,MACnB,KAAKF,EAAI,SAAY,OAAWE,MAAM,EAAIC,QAAU,CAClDF,GAAKvM,IAAIxE,WAAWgR,MAAM,EAC1B,KAAKD,GAAK,SAAY,MAAQ,CAC5BD,EAAI,OAAYA,EAAI,OAAW,KAAOC,GAAK,MAC3CC,UAGJ,GAAIF,EAAI,IAAM,CAEZD,IAAI/R,KAAOgS,MACN,IAAIA,EAAI,KAAO,CAEpBD,IAAI/R,KAAO,IAAQgS,IAAM,CACzBD,KAAI/R,KAAO,IAAQgS,EAAI,OAClB,IAAIA,EAAI,MAAS,CAEtBD,IAAI/R,KAAO,IAAQgS,IAAM,EACzBD,KAAI/R,KAAO,IAAQgS,IAAM,EAAI,EAC7BD,KAAI/R,KAAO,IAAQgS,EAAI,OAClB,CAELD,IAAI/R,KAAO,IAAQgS,IAAM,EACzBD,KAAI/R,KAAO,IAAQgS,IAAM,GAAK,EAC9BD,KAAI/R,KAAO,IAAQgS,IAAM,EAAI,EAC7BD,KAAI/R,KAAO,IAAQgS,EAAI,IAI3B,MAAOD,KAIT,SAAS4J,eAAc5J,IAAKW,KAE1B,GAAIA,IAAM,MAAO,CACf,GAAKX,IAAIN,UAAYoN,mBAAuB9M,IAAIN,UAAYmN,aAAe,CACzE,MAAOpd,QAAOC,aAAa+R,MAAM,KAAMxQ,MAAM4Y,UAAU7J,IAAKW,OAIhE,GAAInO,QAAS,EACb,KAAI,GAAIvE,GAAE,EAAGA,EAAI0S,IAAK1S,IAAK,CACzBuE,QAAU/C,OAAOC,aAAasQ,IAAI/R,IAEpC,MAAOuE,QAKTxF,QAAQ4c,cAAgB,SAAS5J,KAC/B,MAAO4J,eAAc5J,IAAKA,IAAI5R,QAKhCpB,SAAQ+d,cAAgB,SAASpX,KAC/B,GAAIqM,KAAM,GAAI/O,OAAMuY,KAAK7V,IAAIvF,OAC7B,KAAI,GAAIH,GAAE,EAAG0S,IAAIX,IAAI5R,OAAQH,EAAI0S,IAAK1S,IAAK,CACzC+R,IAAI/R,GAAK0F,IAAIxE,WAAWlB,GAE1B,MAAO+R,KAKThT,SAAQyT,WAAa,SAAUT,IAAKO,KAClC,GAAItS,GAAGsK,IAAK0H,EAAGS,KACf,IAAIC,KAAMJ,KAAOP,IAAI5R,MAKrB,IAAIwS,UAAW,GAAId,OAAMa,IAAI,EAE7B,KAAKpI,IAAI,EAAGtK,EAAE,EAAGA,EAAE0S,KAAM,CACvBV,EAAID,IAAI/R,IAER,IAAIgS,EAAI,IAAM,CAAEW,SAASrI,OAAS0H,CAAG,UAErCS,MAAQb,SAASI,EAEjB,IAAIS,MAAQ,EAAG,CAAEE,SAASrI,OAAS,KAAQtK,IAAKyS,MAAM,CAAG,UAGzDT,GAAKS,QAAU,EAAI,GAAOA,QAAU,EAAI,GAAO,CAE/C,OAAOA,MAAQ,GAAKzS,EAAI0S,IAAK,CAC3BV,EAAKA,GAAK,EAAMD,IAAI/R,KAAO,EAC3ByS,SAIF,GAAIA,MAAQ,EAAG,CAAEE,SAASrI,OAAS,KAAQ,UAE3C,GAAI0H,EAAI,MAAS,CACfW,SAASrI,OAAS0H,MACb,CACLA,GAAK,KACLW,UAASrI,OAAS,MAAW0H,GAAK,GAAM,IACxCW,UAASrI,OAAS,MAAU0H,EAAI,MAIpC,MAAO2J,eAAchJ,SAAUrI,KAUjCvL,SAAQsT,WAAa,SAASN,IAAKO,KACjC,GAAIC,IAEJD,KAAMA,KAAOP,IAAI5R,MACjB,IAAImS,IAAMP,IAAI5R,OAAQ,CAAEmS,IAAMP,IAAI5R,OAGlCoS,IAAMD,IAAI,CACV,OAAOC,KAAO,IAAMR,IAAIQ,KAAO,OAAU,IAAM,CAAEA,MAIjD,GAAIA,IAAM,EAAG,CAAE,MAAOD,KAItB,GAAIC,MAAQ,EAAG,CAAE,MAAOD,KAExB,MAAQC,KAAMX,SAASG,IAAIQ,MAAQD,IAAOC,IAAMD,OAG/CyM,WAAW,KAAKC,IAAI,SAAS3e,QAAQrB,OAAOD,SAC/C,YAMA,SAASkgB,SAAQC,MAAOnN,IAAKW,IAAKH,KAChC,GAAI4M,IAAMD,MAAQ,MAAS,EACvBE,GAAOF,QAAU,GAAM,MAAS,EAChCzf,EAAI,CAER,OAAOiT,MAAQ,EAAG,CAIhBjT,EAAIiT,IAAM,IAAO,IAAOA,GACxBA,MAAOjT,CAEP,GAAG,CACD0f,GAAMA,GAAKpN,IAAIQ,OAAS,CACxB6M,IAAMA,GAAKD,GAAK,UACP1f,EAEX0f,KAAM,KACNC,KAAM,MAGR,MAAQD,IAAMC,IAAM,GAAM,EAI5BpgB,OAAOD,QAAUkgB,aACXI,IAAI,SAAShf,QAAQrB,OAAOD,SAClCC,OAAOD,SAGL2a,WAAoB,EACpB4F,gBAAoB,EACpBC,aAAoB,EACpBC,aAAoB,EACpB7F,SAAoB,EACpB8F,QAAoB,EACpBC,QAAoB,EAKpB9F,KAAoB,EACpBC,aAAoB,EACpB8F,YAAoB,EACpBC,SAAoB,EACpBC,gBAAoB,EACpBC,cAAoB,EAEpBC,aAAoB,EAIpBC,iBAA0B,EAC1BC,aAA0B,EAC1BC,mBAA0B,EAC1BpG,uBAA0B,EAG1BqG,WAA0B,EAC1BC,eAA0B,EAC1BC,MAA0B,EAC1BC,QAA0B,EAC1BvG,mBAA0B,EAG1BwG,SAA0B,EAC1BC,OAA0B,EAE1BC,UAA0B,EAG1BzG,WAA0B,QAGtB0G,IAAI,SAASrgB,QAAQrB,OAAOD,SAClC,YAQA,SAAS4hB,aACP,GAAI3O,GAAG/O,QAEP,KAAI,GAAIxD,GAAG,EAAGA,EAAI,IAAKA,IAAI,CACzBuS,EAAIvS,CACJ,KAAI,GAAIqT,GAAG,EAAGA,EAAI,EAAGA,IAAI,CACvBd,EAAMA,EAAE,EAAM,WAAcA,IAAM,EAAOA,IAAM,EAEjD/O,MAAMxD,GAAKuS,EAGb,MAAO/O,OAIT,GAAI2d,UAAWD,WAGf,SAAS5e,OAAMmB,IAAK6O,IAAKW,IAAKH,KAC5B,GAAI/S,GAAIohB,SACJC,IAAMtO,IAAMG,GAEhBxP,KAAMA,KAAQ,CAEd,KAAK,GAAIlD,GAAIuS,IAAKvS,EAAI6gB,IAAK7gB,IAAM,CAC/BkD,IAAOA,MAAQ,EAAK1D,GAAG0D,IAAM6O,IAAI/R,IAAM,KAGzC,MAAQkD,MAAQ,EAIlBlE,OAAOD,QAAUgD,WACX+e,IAAI,SAASzgB,QAAQrB,OAAOD,SAClC,YAEA,IAAIiE,OAAU3C,QAAQ,kBACtB,IAAI0gB,OAAU1gB,QAAQ,UACtB,IAAI4e,SAAU5e,QAAQ,YACtB,IAAI0B,OAAU1B,QAAQ,UACtB,IAAImZ,KAAQnZ,QAAQ,aAOpB,IAAIqZ,YAAkB,CACtB,IAAI4F,iBAAkB,CAEtB,IAAIE,cAAkB,CACtB,IAAI7F,UAAkB,CACtB,IAAI8F,SAAkB,CAOtB,IAAI7F,MAAkB,CACtB,IAAIC,cAAkB,CAGtB,IAAIgG,iBAAmB,CACvB,IAAIC,eAAmB,CAEvB,IAAIC,cAAmB,CAQvB,IAAIjG,wBAAyB,CAG7B,IAAIqG,YAAwB,CAC5B,IAAIC,gBAAwB,CAC5B,IAAIC,OAAwB,CAC5B,IAAIC,SAAwB,CAC5B,IAAIvG,oBAAwB,CAM5B,IAAI0G,WAAwB,CAI5B,IAAIzG,YAAc,CAKlB,IAAIgH,eAAgB,CAEpB,IAAIC,WAAY,EAEhB,IAAIC,eAAgB,CAGpB,IAAIC,cAAgB,EAEpB,IAAIC,UAAgB,GAEpB,IAAIC,SAAgBD,SAAW,EAAID,YAEnC,IAAIG,SAAgB,EAEpB,IAAIC,UAAgB,EAEpB,IAAIC,WAAgB,EAAEH,QAAU,CAEhC,IAAII,UAAY,EAGhB,IAAIC,WAAY,CAChB,IAAIC,WAAY,GAChB,IAAIC,eAAiBD,UAAYD,UAAY,CAE7C,IAAIG,aAAc,EAElB,IAAIC,YAAa,EACjB,IAAIC,aAAc,EAClB,IAAIC,YAAa,EACjB,IAAIC,eAAgB,EACpB,IAAIC,YAAa,GACjB,IAAIC,YAAa,GACjB,IAAIC,cAAe,GAEnB,IAAIC,cAAoB,CACxB,IAAIC,eAAoB,CACxB,IAAIC,mBAAoB,CACxB,IAAIC,gBAAoB,CAExB,IAAIC,SAAU,CAEd,SAAS9H,KAAIG,KAAM4H,WACjB5H,KAAKtB,IAAMA,IAAIkJ,UACf,OAAOA,WAGT,QAASC,MAAKxjB,GACZ,OAAQ,GAAO,IAAM,EAAM,EAAI,EAAI,GAGrC,QAASyjB,MAAK7Q,KAAO,GAAIW,KAAMX,IAAI5R,MAAQ,SAASuS,KAAO,EAAG,CAAEX,IAAIW,KAAO,GAS3E,QAASmQ,eAAc/H,MACrB,GAAInb,GAAImb,KAAKgI,KAGb,IAAIpQ,KAAM/S,EAAEojB,OACZ,IAAIrQ,IAAMoI,KAAKC,UAAW,CACxBrI,IAAMoI,KAAKC,UAEb,GAAIrI,MAAQ,EAAG,CAAE,OAEjB1P,MAAM+Z,SAASjC,KAAKpa,OAAQf,EAAEqjB,YAAarjB,EAAEsjB,YAAavQ,IAAKoI,KAAKU,SACpEV,MAAKU,UAAY9I,GACjB/S,GAAEsjB,aAAevQ,GACjBoI,MAAKoI,WAAaxQ,GAClBoI,MAAKC,WAAarI,GAClB/S,GAAEojB,SAAWrQ,GACb,IAAI/S,EAAEojB,UAAY,EAAG,CACnBpjB,EAAEsjB,YAAc,GAKpB,QAASE,kBAAkBxjB,EAAGyjB,MAC5BrC,MAAMsC,gBAAgB1jB,EAAIA,EAAE2jB,aAAe,EAAI3jB,EAAE2jB,aAAe,EAAI3jB,EAAE4jB,SAAW5jB,EAAE2jB,YAAaF,KAChGzjB,GAAE2jB,YAAc3jB,EAAE4jB,QAClBV,eAAcljB,EAAEmb,MAIlB,QAAS0I,UAAS7jB,EAAG4D,GACnB5D,EAAEqjB,YAAYrjB,EAAEojB,WAAaxf,EAS/B,QAASkgB,aAAY9jB,EAAG4D,GAGtB5D,EAAEqjB,YAAYrjB,EAAEojB,WAAcxf,IAAM,EAAK,GACzC5D,GAAEqjB,YAAYrjB,EAAEojB,WAAaxf,EAAI,IAWnC,QAASmgB,UAAS5I,KAAM/I,IAAKsG,MAAO/T,MAClC,GAAIoO,KAAMoI,KAAKQ,QAEf,IAAI5I,IAAMpO,KAAM,CAAEoO,IAAMpO,KACxB,GAAIoO,MAAQ,EAAG,CAAE,MAAO,GAExBoI,KAAKQ,UAAY5I,GAEjB1P,OAAM+Z,SAAShL,IAAK+I,KAAKta,MAAOsa,KAAKO,QAAS3I,IAAK2F,MACnD,IAAIyC,KAAKgI,MAAMa,OAAS,EAAG,CACzB7I,KAAKoE,MAAQD,QAAQnE,KAAKoE,MAAOnN,IAAKW,IAAK2F,WAGxC,IAAIyC,KAAKgI,MAAMa,OAAS,EAAG,CAC9B7I,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOnN,IAAKW,IAAK2F,OAG3CyC,KAAKO,SAAW3I,GAChBoI,MAAK8I,UAAYlR,GAEjB,OAAOA,KAaT,QAASmR,eAAclkB,EAAGmkB,WACxB,GAAIC,cAAepkB,EAAEqkB,gBACrB,IAAIC,MAAOtkB,EAAE4jB,QACb,IAAIW,MACJ,IAAIxR,IACJ,IAAIyR,UAAWxkB,EAAEykB,WACjB,IAAIC,YAAa1kB,EAAE0kB,UACnB,IAAIC,OAAS3kB,EAAE4jB,SAAY5jB,EAAE4kB,OAAS3C,cAClCjiB,EAAE4jB,UAAY5jB,EAAE4kB,OAAS3C,eAAiB,CAE9C,IAAI4C,MAAO7kB,EAAEP,MAEb,IAAIqlB,OAAQ9kB,EAAE+kB,MACd,IAAIC,MAAQhlB,EAAEglB,IAMd,IAAIC,QAASjlB,EAAE4jB,SAAW5B,SAC1B,IAAIkD,WAAaL,KAAKP,KAAOE,SAAW,EACxC,IAAIW,UAAaN,KAAKP,KAAOE,SAQ7B,IAAIxkB,EAAEykB,aAAezkB,EAAEolB,WAAY,CACjChB,eAAiB,EAKnB,GAAIM,WAAa1kB,EAAEqlB,UAAW,CAAEX,WAAa1kB,EAAEqlB,UAI/C,EAAG,CAEDd,MAAQJ,SAWR,IAAIU,KAAKN,MAAQC,YAAkBW,UAC/BN,KAAKN,MAAQC,SAAW,KAAOU,WAC/BL,KAAKN,SAA0BM,KAAKP,OACpCO,OAAON,SAAwBM,KAAKP,KAAO,GAAI,CACjD,SASFA,MAAQ,CACRC,QAMA,GAAG,QAEMM,OAAOP,QAAUO,OAAON,QAAUM,OAAOP,QAAUO,OAAON,QAC1DM,OAAOP,QAAUO,OAAON,QAAUM,OAAOP,QAAUO,OAAON,QAC1DM,OAAOP,QAAUO,OAAON,QAAUM,OAAOP,QAAUO,OAAON,QAC1DM,OAAOP,QAAUO,OAAON,QAAUM,OAAOP,QAAUO,OAAON,QAC1DD,KAAOW,OAIhBlS,KAAMiP,WAAaiD,OAASX,KAC5BA,MAAOW,OAASjD,SAEhB,IAAIjP,IAAMyR,SAAU,CAClBxkB,EAAEslB,YAAcnB,SAChBK,UAAWzR,GACX,IAAIA,KAAO2R,WAAY,CACrB,MAEFQ,UAAaL,KAAKP,KAAOE,SAAW,EACpCW,UAAaN,KAAKP,KAAOE,kBAEnBL,UAAYa,KAAKb,UAAYW,QAAUH,SAAWP,eAAiB,EAE7E,IAAII,UAAYxkB,EAAEqlB,UAAW,CAC3B,MAAOb,UAET,MAAOxkB,GAAEqlB,UAcX,QAASE,aAAYvlB,GACnB,GAAIwlB,SAAUxlB,EAAE4kB,MAChB,IAAIzG,GAAGre,EAAG2lB,EAAGC,KAAM3f,GAInB,GAAG,CACD2f,KAAO1lB,EAAE2lB,YAAc3lB,EAAEqlB,UAAYrlB,EAAE4jB,QAoBvC,IAAI5jB,EAAE4jB,UAAY4B,SAAWA,QAAUvD,eAAgB,CAErD5e,MAAM+Z,SAASpd,EAAEP,OAAQO,EAAEP,OAAQ+lB,QAASA,QAAS,EACrDxlB,GAAEslB,aAAeE,OACjBxlB,GAAE4jB,UAAY4B,OAEdxlB,GAAE2jB,aAAe6B,OASjB1lB,GAAIE,EAAE4lB,SACNzH,GAAIre,CACJ,GAAG,CACD2lB,EAAIzlB,EAAE6lB,OAAO1H,EACbne,GAAE6lB,KAAK1H,GAAMsH,GAAKD,QAAUC,EAAID,QAAU,UACjC1lB,EAEXA,GAAI0lB,OACJrH,GAAIre,CACJ,GAAG,CACD2lB,EAAIzlB,EAAEglB,OAAO7G,EACbne,GAAEglB,KAAK7G,GAAMsH,GAAKD,QAAUC,EAAID,QAAU,UAIjC1lB,EAEX4lB,OAAQF,QAEV,GAAIxlB,EAAEmb,KAAKQ,WAAa,EAAG,CACzB,MAeF7b,EAAIikB,SAAS/jB,EAAEmb,KAAMnb,EAAEP,OAAQO,EAAE4jB,SAAW5jB,EAAEqlB,UAAWK,KACzD1lB,GAAEqlB,WAAavlB,CAGf,IAAIE,EAAEqlB,UAAYrlB,EAAE8lB,QAAU/D,UAAW,CACvChc,IAAM/F,EAAE4jB,SAAW5jB,EAAE8lB,MACrB9lB,GAAE+lB,MAAQ/lB,EAAEP,OAAOsG,IAGnB/F,GAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOsG,IAAM,IAAM/F,EAAEimB,SAI9D,OAAOjmB,EAAE8lB,OAAQ,CAEf9lB,EAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOsG,IAAMgc,UAAU,IAAM/hB,EAAEimB,SAExEjmB,GAAEglB,KAAKjf,IAAM/F,EAAE+kB,QAAU/kB,EAAE6lB,KAAK7lB,EAAE+lB,MAClC/lB,GAAE6lB,KAAK7lB,EAAE+lB,OAAShgB,GAClBA,MACA/F,GAAE8lB,QACF,IAAI9lB,EAAEqlB,UAAYrlB,EAAE8lB,OAAS/D,UAAW,CACtC,eAQC/hB,EAAEqlB,UAAYpD,eAAiBjiB,EAAEmb,KAAKQ,WAAa,GAiD9D,QAASuK,gBAAelmB,EAAGmmB,OAIzB,GAAIC,gBAAiB,KAErB,IAAIA,eAAiBpmB,EAAEqmB,iBAAmB,EAAG,CAC3CD,eAAiBpmB,EAAEqmB,iBAAmB,EAIxC,OAAS,CAEP,GAAIrmB,EAAEqlB,WAAa,EAAG,CASpBE,YAAYvlB,EACZ,IAAIA,EAAEqlB,YAAc,GAAKc,QAAUpM,WAAY,CAC7C,MAAO2I,cAGT,GAAI1iB,EAAEqlB,YAAc,EAAG,CACrB,OAOJrlB,EAAE4jB,UAAY5jB,EAAEqlB,SAChBrlB,GAAEqlB,UAAY,CAGd,IAAIiB,WAAYtmB,EAAE2jB,YAAcyC,cAEhC,IAAIpmB,EAAE4jB,WAAa,GAAK5jB,EAAE4jB,UAAY0C,UAAW,CAE/CtmB,EAAEqlB,UAAYrlB,EAAE4jB,SAAW0C,SAC3BtmB,GAAE4jB,SAAW0C,SAEb9C,kBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eASX,GAAI1iB,EAAE4jB,SAAW5jB,EAAE2jB,aAAgB3jB,EAAE4kB,OAAS3C,cAAgB,CAE5DuB,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,gBAMb1iB,EAAE8lB,OAAS,CAEX,IAAIK,QAAUnM,SAAU,CAEtBwJ,iBAAiBxjB,EAAG,KACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOwH,mBAGT,MAAOC,gBAGT,GAAI7iB,EAAE4jB,SAAW5jB,EAAE2jB,YAAa,CAE9BH,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eAKX,MAAOA,cAUT,QAAS6D,cAAavmB,EAAGmmB,OACvB,GAAIK,UACJ,IAAIC,OAEJ,QAAS,CAMP,GAAIzmB,EAAEqlB,UAAYpD,cAAe,CAC/BsD,YAAYvlB,EACZ,IAAIA,EAAEqlB,UAAYpD,eAAiBkE,QAAUpM,WAAY,CACvD,MAAO2I,cAET,GAAI1iB,EAAEqlB,YAAc,EAAG,CACrB,OAOJmB,UAAY,CACZ,IAAIxmB,EAAEqlB,WAAatD,UAAW,CAE5B/hB,EAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOO,EAAE4jB,SAAW7B,UAAY,IAAM/hB,EAAEimB,SACjFO,WAAYxmB,EAAEglB,KAAKhlB,EAAE4jB,SAAW5jB,EAAE+kB,QAAU/kB,EAAE6lB,KAAK7lB,EAAE+lB,MACrD/lB,GAAE6lB,KAAK7lB,EAAE+lB,OAAS/lB,EAAE4jB,SAOtB,GAAI4C,YAAc,GAAcxmB,EAAE4jB,SAAW4C,WAAexmB,EAAE4kB,OAAS3C,cAAiB,CAKtFjiB,EAAE0mB,aAAexC,cAAclkB,EAAGwmB,WAGpC,GAAIxmB,EAAE0mB,cAAgB3E,UAAW,CAK/B0E,OAASrF,MAAMuF,UAAU3mB,EAAGA,EAAE4jB,SAAW5jB,EAAEslB,YAAatlB,EAAE0mB,aAAe3E,UAEzE/hB,GAAEqlB,WAAarlB,EAAE0mB,YAKjB,IAAI1mB,EAAE0mB,cAAgB1mB,EAAE4mB,gBAAuC5mB,EAAEqlB,WAAatD,UAAW,CACvF/hB,EAAE0mB,cACF,GAAG,CACD1mB,EAAE4jB,UAEF5jB,GAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOO,EAAE4jB,SAAW7B,UAAY,IAAM/hB,EAAEimB,SACjFO,WAAYxmB,EAAEglB,KAAKhlB,EAAE4jB,SAAW5jB,EAAE+kB,QAAU/kB,EAAE6lB,KAAK7lB,EAAE+lB,MACrD/lB,GAAE6lB,KAAK7lB,EAAE+lB,OAAS/lB,EAAE4jB,iBAKX5jB,EAAE0mB,eAAiB,EAC9B1mB,GAAE4jB,eAEJ,CACE5jB,EAAE4jB,UAAY5jB,EAAE0mB,YAChB1mB,GAAE0mB,aAAe,CACjB1mB,GAAE+lB,MAAQ/lB,EAAEP,OAAOO,EAAE4jB,SAErB5jB,GAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOO,EAAE4jB,SAAW,IAAM5jB,EAAEimB,eASlE,CAILQ,OAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAEP,OAAOO,EAAE4jB,UAE1C5jB,GAAEqlB,WACFrlB,GAAE4jB,WAEJ,GAAI6C,OAAQ,CAEVjD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,gBAKb1iB,EAAE8lB,OAAW9lB,EAAE4jB,SAAY7B,UAAU,EAAM/hB,EAAE4jB,SAAW7B,UAAU,CAClE,IAAIoE,QAAUnM,SAAU,CAEtBwJ,iBAAiBxjB,EAAG,KACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOwH,mBAGT,MAAOC,gBAET,GAAI7iB,EAAE6mB,SAAU,CAEdrD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eAIX,MAAOC,eAQT,QAASmE,cAAa9mB,EAAGmmB,OACvB,GAAIK,UACJ,IAAIC,OAEJ,IAAIM,WAGJ,QAAS,CAMP,GAAI/mB,EAAEqlB,UAAYpD,cAAe,CAC/BsD,YAAYvlB,EACZ,IAAIA,EAAEqlB,UAAYpD,eAAiBkE,QAAUpM,WAAY,CACvD,MAAO2I,cAET,GAAI1iB,EAAEqlB,YAAc,EAAG,CAAE,OAM3BmB,UAAY,CACZ,IAAIxmB,EAAEqlB,WAAatD,UAAW,CAE5B/hB,EAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOO,EAAE4jB,SAAW7B,UAAY,IAAM/hB,EAAEimB,SACjFO,WAAYxmB,EAAEglB,KAAKhlB,EAAE4jB,SAAW5jB,EAAE+kB,QAAU/kB,EAAE6lB,KAAK7lB,EAAE+lB,MACrD/lB,GAAE6lB,KAAK7lB,EAAE+lB,OAAS/lB,EAAE4jB,SAMtB5jB,EAAEykB,YAAczkB,EAAE0mB,YAClB1mB,GAAEgnB,WAAahnB,EAAEslB,WACjBtlB,GAAE0mB,aAAe3E,UAAU,CAE3B,IAAIyE,YAAc,GAAYxmB,EAAEykB,YAAczkB,EAAE4mB,gBAC5C5mB,EAAE4jB,SAAW4C,WAAcxmB,EAAE4kB,OAAO3C,cAA+B,CAKrEjiB,EAAE0mB,aAAexC,cAAclkB,EAAGwmB,UAGlC,IAAIxmB,EAAE0mB,cAAgB,IAClB1mB,EAAE2a,WAAa6F,YAAexgB,EAAE0mB,eAAiB3E,WAAa/hB,EAAE4jB,SAAW5jB,EAAEslB,YAAc,MAAmB,CAKhHtlB,EAAE0mB,aAAe3E,UAAU,GAM/B,GAAI/hB,EAAEykB,aAAe1C,WAAa/hB,EAAE0mB,cAAgB1mB,EAAEykB,YAAa,CACjEsC,WAAa/mB,EAAE4jB,SAAW5jB,EAAEqlB,UAAYtD,SAOxC0E,QAASrF,MAAMuF,UAAU3mB,EAAGA,EAAE4jB,SAAW,EAAG5jB,EAAEgnB,WAAYhnB,EAAEykB,YAAc1C,UAM1E/hB,GAAEqlB,WAAarlB,EAAEykB,YAAY,CAC7BzkB,GAAEykB,aAAe,CACjB,GAAG,CACD,KAAMzkB,EAAE4jB,UAAYmD,WAAY,CAE9B/mB,EAAE+lB,OAAU/lB,EAAE+lB,OAAS/lB,EAAEgmB,WAAchmB,EAAEP,OAAOO,EAAE4jB,SAAW7B,UAAY,IAAM/hB,EAAEimB,SACjFO,WAAYxmB,EAAEglB,KAAKhlB,EAAE4jB,SAAW5jB,EAAE+kB,QAAU/kB,EAAE6lB,KAAK7lB,EAAE+lB,MACrD/lB,GAAE6lB,KAAK7lB,EAAE+lB,OAAS/lB,EAAE4jB,kBAGb5jB,EAAEykB,cAAgB,EAC7BzkB,GAAEinB,gBAAkB,CACpBjnB,GAAE0mB,aAAe3E,UAAU,CAC3B/hB,GAAE4jB,UAEF,IAAI6C,OAAQ,CAEVjD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,oBAKN,IAAI1iB,EAAEinB,gBAAiB,CAO5BR,OAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAEP,OAAOO,EAAE4jB,SAAS,GAEnD,IAAI6C,OAAQ,CAEVjD,iBAAiBxjB,EAAG,OAGtBA,EAAE4jB,UACF5jB,GAAEqlB,WACF,IAAIrlB,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,mBAEJ,CAIL1iB,EAAEinB,gBAAkB,CACpBjnB,GAAE4jB,UACF5jB,GAAEqlB,aAIN,GAAIrlB,EAAEinB,gBAAiB,CAGrBR,OAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAEP,OAAOO,EAAE4jB,SAAS,GAEnD5jB,GAAEinB,gBAAkB,EAEtBjnB,EAAE8lB,OAAS9lB,EAAE4jB,SAAW7B,UAAU,EAAI/hB,EAAE4jB,SAAW7B,UAAU,CAC7D,IAAIoE,QAAUnM,SAAU,CAEtBwJ,iBAAiBxjB,EAAG,KACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOwH,mBAGT,MAAOC,gBAET,GAAI7iB,EAAE6mB,SAAU,CAEdrD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eAKX,MAAOC,eAST,QAASuE,aAAYlnB,EAAGmmB,OACtB,GAAIM,OACJ,IAAIzB,KACJ,IAAIV,MAAMW,MAEV,IAAIJ,MAAO7kB,EAAEP,MAEb,QAAS,CAKP,GAAIO,EAAEqlB,WAAarD,UAAW,CAC5BuD,YAAYvlB,EACZ,IAAIA,EAAEqlB,WAAarD,WAAamE,QAAUpM,WAAY,CACpD,MAAO2I,cAET,GAAI1iB,EAAEqlB,YAAc,EAAG,CAAE,OAI3BrlB,EAAE0mB,aAAe,CACjB,IAAI1mB,EAAEqlB,WAAatD,WAAa/hB,EAAE4jB,SAAW,EAAG,CAC9CU,KAAOtkB,EAAE4jB,SAAW,CACpBoB,MAAOH,KAAKP,KACZ,IAAIU,OAASH,OAAOP,OAASU,OAASH,OAAOP,OAASU,OAASH,OAAOP,MAAO,CAC3EW,OAASjlB,EAAE4jB,SAAW5B,SACtB,GAAG,QAEMgD,OAASH,OAAOP,OAASU,OAASH,OAAOP,OACzCU,OAASH,OAAOP,OAASU,OAASH,OAAOP,OACzCU,OAASH,OAAOP,OAASU,OAASH,OAAOP,OACzCU,OAASH,OAAOP,OAASU,OAASH,OAAOP,OACzCA,KAAOW,OAChBjlB,GAAE0mB,aAAe1E,WAAaiD,OAASX,KACvC,IAAItkB,EAAE0mB,aAAe1mB,EAAEqlB,UAAW,CAChCrlB,EAAE0mB,aAAe1mB,EAAEqlB,YAOzB,GAAIrlB,EAAE0mB,cAAgB3E,UAAW,CAI/B0E,OAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAE0mB,aAAe3E,UAEhD/hB,GAAEqlB,WAAarlB,EAAE0mB,YACjB1mB,GAAE4jB,UAAY5jB,EAAE0mB,YAChB1mB,GAAE0mB,aAAe,MACZ,CAILD,OAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAEP,OAAOO,EAAE4jB,UAE1C5jB,GAAEqlB,WACFrlB,GAAE4jB,WAEJ,GAAI6C,OAAQ,CAEVjD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,gBAKb1iB,EAAE8lB,OAAS,CACX,IAAIK,QAAUnM,SAAU,CAEtBwJ,iBAAiBxjB,EAAG,KACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOwH,mBAGT,MAAOC,gBAET,GAAI7iB,EAAE6mB,SAAU,CAEdrD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eAIX,MAAOC,eAOT,QAASwE,cAAannB,EAAGmmB,OACvB,GAAIM,OAEJ;OAAS,CAEP,GAAIzmB,EAAEqlB,YAAc,EAAG,CACrBE,YAAYvlB,EACZ,IAAIA,EAAEqlB,YAAc,EAAG,CACrB,GAAIc,QAAUpM,WAAY,CACxB,MAAO2I,cAET,OAKJ1iB,EAAE0mB,aAAe,CAGjBD,QAASrF,MAAMuF,UAAU3mB,EAAG,EAAGA,EAAEP,OAAOO,EAAE4jB,UAC1C5jB,GAAEqlB,WACFrlB,GAAE4jB,UACF,IAAI6C,OAAQ,CAEVjD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,gBAKb1iB,EAAE8lB,OAAS,CACX,IAAIK,QAAUnM,SAAU,CAEtBwJ,iBAAiBxjB,EAAG,KACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOwH,mBAGT,MAAOC,gBAET,GAAI7iB,EAAE6mB,SAAU,CAEdrD,iBAAiBxjB,EAAG,MACpB,IAAIA,EAAEmb,KAAKC,YAAc,EAAG,CAC1B,MAAOsH,eAIX,MAAOC,eAQT,GAAIyE,QAAS,SAAUC,YAAaC,SAAUC,YAAaC,UAAWC,MACpExlB,KAAKolB,YAAcA,WACnBplB,MAAKqlB,SAAWA,QAChBrlB,MAAKslB,YAAcA,WACnBtlB,MAAKulB,UAAYA,SACjBvlB,MAAKwlB,KAAOA,KAGd,IAAIC,oBAEJA,sBAEE,GAAIN,QAAO,EAAG,EAAG,EAAG,EAAGlB,gBACvB,GAAIkB,QAAO,EAAG,EAAG,EAAG,EAAGb,cACvB,GAAIa,QAAO,EAAG,EAAG,GAAI,EAAGb,cACxB,GAAIa,QAAO,EAAG,EAAG,GAAI,GAAIb,cAEzB,GAAIa,QAAO,EAAG,EAAG,GAAI,GAAIN,cACzB,GAAIM,QAAO,EAAG,GAAI,GAAI,GAAIN,cAC1B,GAAIM,QAAO,EAAG,GAAI,IAAK,IAAKN,cAC5B,GAAIM,QAAO,EAAG,GAAI,IAAK,IAAKN,cAC5B,GAAIM,QAAO,GAAI,IAAK,IAAK,KAAMN,cAC/B,GAAIM,QAAO,GAAI,IAAK,IAAK,KAAMN,cAOjC,SAASa,SAAQ3nB,GACfA,EAAE2lB,YAAc,EAAI3lB,EAAE4kB,MAGtB3B,MAAKjjB,EAAE6lB,KAIP7lB,GAAE4mB,eAAiBc,oBAAoB1nB,EAAEua,OAAO+M,QAChDtnB,GAAEolB,WAAasC,oBAAoB1nB,EAAEua,OAAO8M,WAC5CrnB,GAAE0kB,WAAagD,oBAAoB1nB,EAAEua,OAAOgN,WAC5CvnB,GAAEqkB,iBAAmBqD,oBAAoB1nB,EAAEua,OAAOiN,SAElDxnB,GAAE4jB,SAAW,CACb5jB,GAAE2jB,YAAc,CAChB3jB,GAAEqlB,UAAY,CACdrlB,GAAE8lB,OAAS,CACX9lB,GAAE0mB,aAAe1mB,EAAEykB,YAAc1C,UAAY,CAC7C/hB,GAAEinB,gBAAkB,CACpBjnB,GAAE+lB,MAAQ,EAIZ,QAAS6B,gBACP3lB,KAAKkZ,KAAO,IACZlZ,MAAKoZ,OAAS,CACdpZ,MAAKohB,YAAc,IACnBphB,MAAKokB,iBAAmB,CACxBpkB,MAAKqhB,YAAc,CACnBrhB,MAAKmhB,QAAU,CACfnhB,MAAK+hB,KAAO,CACZ/hB,MAAK4lB,OAAS,IACd5lB,MAAK6lB,QAAU,CACf7lB,MAAKyS,OAAS2F,UACdpY,MAAK8lB,YAAc,CAEnB9lB,MAAK2iB,OAAS,CACd3iB,MAAK+lB,OAAS,CACd/lB,MAAK8iB,OAAS,CAEd9iB,MAAKxC,OAAS,IAQdwC,MAAK0jB,YAAc,CAKnB1jB,MAAK+iB,KAAO,IAMZ/iB,MAAK4jB,KAAO,IAEZ5jB,MAAK8jB,MAAQ,CACb9jB,MAAK2jB,UAAY,CACjB3jB,MAAKgmB,UAAY,CACjBhmB,MAAKgkB,UAAY,CAEjBhkB,MAAK+jB,WAAa,CAOlB/jB,MAAK0hB,YAAc,CAKnB1hB,MAAKykB,aAAe,CACpBzkB,MAAK+kB,WAAa,CAClB/kB,MAAKglB,gBAAkB,CACvBhlB,MAAK2hB,SAAW,CAChB3hB,MAAKqjB,YAAc,CACnBrjB,MAAKojB,UAAY,CAEjBpjB,MAAKwiB,YAAc,CAKnBxiB,MAAKoiB,iBAAmB,CAMxBpiB,MAAK2kB,eAAiB,CAYtB3kB,MAAKsY,MAAQ,CACbtY,MAAK0Y,SAAW,CAEhB1Y,MAAKmjB,WAAa,CAGlBnjB,MAAKyiB,WAAa,CAYlBziB,MAAKimB,UAAa,GAAI7kB,OAAMyb,MAAM+C,UAAY,EAC9C5f,MAAKkmB,UAAa,GAAI9kB,OAAMyb,OAAO,EAAE6C,QAAQ,GAAK,EAClD1f,MAAKmmB,QAAa,GAAI/kB,OAAMyb,OAAO,EAAE8C,SAAS,GAAK,EACnDqB,MAAKhhB,KAAKimB,UACVjF,MAAKhhB,KAAKkmB,UACVlF,MAAKhhB,KAAKmmB,QAEVnmB,MAAKomB,OAAW,IAChBpmB,MAAKqmB,OAAW,IAChBrmB,MAAKsmB,QAAW,IAGhBtmB,MAAKumB,SAAW,GAAInlB,OAAMyb,MAAMgD,SAAS,EAIzC7f,MAAKwmB,KAAO,GAAIplB,OAAMyb,MAAM,EAAE4C,QAAQ,EACtCuB,MAAKhhB,KAAKwmB,KAEVxmB,MAAKymB,SAAW,CAChBzmB,MAAK0mB,SAAW,CAKhB1mB,MAAK2mB,MAAQ,GAAIvlB,OAAMyb,MAAM,EAAE4C,QAAQ,EACvCuB,MAAKhhB,KAAK2mB,MAIV3mB,MAAK4mB,MAAQ,CAEb5mB,MAAK6mB,YAAc,CAoBnB7mB,MAAK4kB,SAAW,CAEhB5kB,MAAK8mB,MAAQ,CAMb9mB,MAAK+mB,QAAU,CACf/mB,MAAKgnB,WAAa,CAClBhnB,MAAKinB,QAAU,CACfjnB,MAAK6jB,OAAS,CAGd7jB,MAAKknB,OAAS,CAIdlnB,MAAKmnB,SAAW,EAgBlB,QAASC,kBAAiBlO,MACxB,GAAInb,EAEJ,KAAKmb,OAASA,KAAKgI,MAAO,CACxB,MAAOnI,KAAIG,KAAM+E,gBAGnB/E,KAAK8I,SAAW9I,KAAKoI,UAAY,CACjCpI,MAAKmO,UAAYxI,SAEjB9gB,GAAImb,KAAKgI,KACTnjB,GAAEojB,QAAU,CACZpjB,GAAEsjB,YAAc,CAEhB,IAAItjB,EAAEgkB,KAAO,EAAG,CACdhkB,EAAEgkB,MAAQhkB,EAAEgkB,KAGdhkB,EAAEqb,OAAUrb,EAAEgkB,KAAO7B,WAAaK,UAClCrH,MAAKoE,MAASvf,EAAEgkB,OAAS,EACvB,EAEA,CACFhkB,GAAE+nB,WAAahO,UACfqH,OAAMmI,SAASvpB,EACf,OAAOia,MAIT,QAASuP,cAAarO,MACpB,GAAIzM,KAAM2a,iBAAiBlO,KAC3B,IAAIzM,MAAQuL,KAAM,CAChB0N,QAAQxM,KAAKgI,OAEf,MAAOzU,KAIT,QAAS6M,kBAAiBJ,KAAM0K,MAC9B,IAAK1K,OAASA,KAAKgI,MAAO,CAAE,MAAOjD,gBACnC,GAAI/E,KAAKgI,MAAMa,OAAS,EAAG,CAAE,MAAO9D,gBACpC/E,KAAKgI,MAAM0E,OAAShC,IACpB,OAAO5L,MAIT,QAASqB,cAAaH,KAAMZ,MAAO7F,OAAQ+F,WAAYC,SAAUC,UAC/D,IAAKQ,KAAM,CACT,MAAO+E,gBAET,GAAI8D,MAAO,CAEX,IAAIzJ,QAAUJ,sBAAuB,CACnCI,MAAQ,EAGV,GAAIE,WAAa,EAAG,CAClBuJ,KAAO,CACPvJ,aAAcA,eAGX,IAAIA,WAAa,GAAI,CACxBuJ,KAAO,CACPvJ,aAAc,GAIhB,GAAIC,SAAW,GAAKA,SAAW2G,eAAiB3M,SAAW2F,YACzDI,WAAa,GAAKA,WAAa,IAAMF,MAAQ,GAAKA,MAAQ,GAC1DI,SAAW,GAAKA,SAAWgG,QAAS,CACpC,MAAO3F,KAAIG,KAAM+E,gBAInB,GAAIzF,aAAe,EAAG,CACpBA,WAAa,EAIf,GAAIza,GAAI,GAAI4nB,aAEZzM,MAAKgI,MAAQnjB,CACbA,GAAEmb,KAAOA,IAETnb,GAAEgkB,KAAOA,IACThkB,GAAE6nB,OAAS,IACX7nB,GAAEgoB,OAASvN,UACXza,GAAE4kB,OAAS,GAAK5kB,EAAEgoB,MAClBhoB,GAAE+kB,OAAS/kB,EAAE4kB,OAAS,CAEtB5kB,GAAEioB,UAAYvN,SAAW,CACzB1a,GAAE4lB,UAAY,GAAK5lB,EAAEioB,SACrBjoB,GAAEimB,UAAYjmB,EAAE4lB,UAAY,CAC5B5lB,GAAEgmB,eAAiBhmB,EAAEioB,UAAYlG,UAAY,GAAKA,UAElD/hB,GAAEP,OAAS,GAAI4D,OAAMuY,KAAK5b,EAAE4kB,OAAS,EACrC5kB,GAAE6lB,KAAO,GAAIxiB,OAAMyb,MAAM9e,EAAE4lB,UAC3B5lB,GAAEglB,KAAO,GAAI3hB,OAAMyb,MAAM9e,EAAE4kB,OAK3B5kB,GAAE8oB,YAAc,GAAMpO,SAAW,CAEjC1a,GAAEqmB,iBAAmBrmB,EAAE8oB,YAAc,CACrC9oB,GAAEqjB,YAAc,GAAIhgB,OAAMuY,KAAK5b,EAAEqmB,iBAEjCrmB,GAAE+oB,MAAQ/oB,EAAE8oB,aAAe,CAC3B9oB,GAAE6oB,OAAS,EAAI,GAAK7oB,EAAE8oB,WAEtB9oB,GAAEua,MAAQA,KACVva,GAAE2a,SAAWA,QACb3a,GAAE0U,OAASA,MAEX,OAAO8U,cAAarO,MAGtB,QAASsO,aAAYtO,KAAMZ,OACzB,MAAOe,cAAaH,KAAMZ,MAAOF,WAAYiH,UAAWC,cAAenH,oBAIzE,QAASjB,SAAQgC,KAAMgL,OACrB,GAAIuD,WAAW1pB,CACf,IAAI2pB,KAAKC,GAET,KAAKzO,OAASA,KAAKgI,OACjBgD,MAAQrG,SAAWqG,MAAQ,EAAG,CAC9B,MAAOhL,MAAOH,IAAIG,KAAM+E,gBAAkBA,eAG5ClgB,EAAImb,KAAKgI,KAET,KAAKhI,KAAKpa,SACJoa,KAAKta,OAASsa,KAAKQ,WAAa,GACjC3b,EAAEqb,SAAWoH,cAAgB0D,QAAUnM,SAAW,CACrD,MAAOgB,KAAIG,KAAOA,KAAKC,YAAc,EAAKgF,YAAcF,gBAG1DlgB,EAAEmb,KAAOA,IACTuO,WAAY1pB,EAAE+nB,UACd/nB,GAAE+nB,WAAa5B,KAGf,IAAInmB,EAAEqb,SAAW8G,WAAY,CAE3B,GAAIniB,EAAEgkB,OAAS,EAAG,CAChB7I,KAAKoE,MAAQ,CACbsE,UAAS7jB,EAAG,GACZ6jB,UAAS7jB,EAAG,IACZ6jB,UAAS7jB,EAAG,EACZ,KAAKA,EAAE6nB,OAAQ,CACbhE,SAAS7jB,EAAG,EACZ6jB,UAAS7jB,EAAG,EACZ6jB,UAAS7jB,EAAG,EACZ6jB,UAAS7jB,EAAG,EACZ6jB,UAAS7jB,EAAG,EACZ6jB,UAAS7jB,EAAGA,EAAEua,QAAU,EAAI,EACfva,EAAE2a,UAAY8F,gBAAkBzgB,EAAEua,MAAQ,EAC1C,EAAI,EACjBsJ,UAAS7jB,EAAG8iB,QACZ9iB,GAAEqb,OAASmH,eAER,CACHqB,SAAS7jB,GAAIA,EAAE6nB,OAAOgC,KAAO,EAAI,IACpB7pB,EAAE6nB,OAAOiC,KAAO,EAAI,KACnB9pB,EAAE6nB,OAAOkC,MAAQ,EAAI,KACrB/pB,EAAE6nB,OAAO9c,KAAO,EAAI,KACpB/K,EAAE6nB,OAAOjiB,QAAU,EAAI,IAErCie,UAAS7jB,EAAGA,EAAE6nB,OAAOmC,KAAO,IAC5BnG,UAAS7jB,EAAIA,EAAE6nB,OAAOmC,MAAQ,EAAK,IACnCnG,UAAS7jB,EAAIA,EAAE6nB,OAAOmC,MAAQ,GAAM,IACpCnG,UAAS7jB,EAAIA,EAAE6nB,OAAOmC,MAAQ,GAAM,IACpCnG,UAAS7jB,EAAGA,EAAEua,QAAU,EAAI,EACfva,EAAE2a,UAAY8F,gBAAkBzgB,EAAEua,MAAQ,EAC1C,EAAI,EACjBsJ,UAAS7jB,EAAGA,EAAE6nB,OAAOoC,GAAK,IAC1B,IAAIjqB,EAAE6nB,OAAOkC,OAAS/pB,EAAE6nB,OAAOkC,MAAMvpB,OAAQ,CAC3CqjB,SAAS7jB,EAAGA,EAAE6nB,OAAOkC,MAAMvpB,OAAS,IACpCqjB,UAAS7jB,EAAIA,EAAE6nB,OAAOkC,MAAMvpB,QAAU,EAAK,KAE7C,GAAIR,EAAE6nB,OAAOiC,KAAM,CACjB3O,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAS,GAE3DpjB,EAAE8nB,QAAU,CACZ9nB,GAAEqb,OAAS+G,iBAIf,CACE,GAAI1U,QAAU2M,YAAera,EAAEgoB,OAAS,GAAM,IAAO,CACrD,IAAIkC,cAAe,CAEnB,IAAIlqB,EAAE2a,UAAY8F,gBAAkBzgB,EAAEua,MAAQ,EAAG,CAC/C2P,YAAc,MACT,IAAIlqB,EAAEua,MAAQ,EAAG,CACtB2P,YAAc,MACT,IAAIlqB,EAAEua,QAAU,EAAG,CACxB2P,YAAc,MACT,CACLA,YAAc,EAEhBxc,QAAWwc,aAAe,CAC1B,IAAIlqB,EAAE4jB,WAAa,EAAG,CAAElW,QAAUwU,YAClCxU,QAAU,GAAMA,OAAS,EAEzB1N,GAAEqb,OAASmH,UACXsB,aAAY9jB,EAAG0N,OAGf,IAAI1N,EAAE4jB,WAAa,EAAG,CACpBE,YAAY9jB,EAAGmb,KAAKoE,QAAU,GAC9BuE,aAAY9jB,EAAGmb,KAAKoE,MAAQ,OAE9BpE,KAAKoE,MAAQ,GAKjB,GAAIvf,EAAEqb,SAAW+G,YAAa,CAC5B,GAAIpiB,EAAE6nB,OAAOkC,MAAqB,CAChCJ,IAAM3pB,EAAEojB,OAER,OAAOpjB,EAAE8nB,SAAW9nB,EAAE6nB,OAAOkC,MAAMvpB,OAAS,OAAS,CACnD,GAAIR,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpC,GAAIrmB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAK,CACpCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjEzG,cAAc/H,KACdwO,KAAM3pB,EAAEojB,OACR,IAAIpjB,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpC,OAGJxC,SAAS7jB,EAAGA,EAAE6nB,OAAOkC,MAAM/pB,EAAE8nB,SAAW,IACxC9nB,GAAE8nB,UAEJ,GAAI9nB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAK,CACpCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjE,GAAI3pB,EAAE8nB,UAAY9nB,EAAE6nB,OAAOkC,MAAMvpB,OAAQ,CACvCR,EAAE8nB,QAAU,CACZ9nB,GAAEqb,OAASgH,gBAGV,CACHriB,EAAEqb,OAASgH,YAGf,GAAIriB,EAAEqb,SAAWgH,WAAY,CAC3B,GAAIriB,EAAE6nB,OAAO9c,KAAoB,CAC/B4e,IAAM3pB,EAAEojB,OAGR,GAAG,CACD,GAAIpjB,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpC,GAAIrmB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAK,CACpCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjEzG,cAAc/H,KACdwO,KAAM3pB,EAAEojB,OACR,IAAIpjB,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpCuD,IAAM,CACN,QAIJ,GAAI5pB,EAAE8nB,QAAU9nB,EAAE6nB,OAAO9c,KAAKvK,OAAQ,CACpCopB,IAAM5pB,EAAE6nB,OAAO9c,KAAKxJ,WAAWvB,EAAE8nB,WAAa,QACzC,CACL8B,IAAM,EAER/F,SAAS7jB,EAAG4pB,WACLA,MAAQ,EAEjB,IAAI5pB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAI,CACnCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjE,GAAIC,MAAQ,EAAG,CACb5pB,EAAE8nB,QAAU,CACZ9nB,GAAEqb,OAASiH,mBAGV,CACHtiB,EAAEqb,OAASiH,eAGf,GAAItiB,EAAEqb,SAAWiH,cAAe,CAC9B,GAAItiB,EAAE6nB,OAAOjiB,QAAuB,CAClC+jB,IAAM3pB,EAAEojB,OAGR,GAAG,CACD,GAAIpjB,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpC,GAAIrmB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAK,CACpCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjEzG,cAAc/H,KACdwO,KAAM3pB,EAAEojB,OACR,IAAIpjB,EAAEojB,UAAYpjB,EAAEqmB,iBAAkB,CACpCuD,IAAM,CACN,QAIJ,GAAI5pB,EAAE8nB,QAAU9nB,EAAE6nB,OAAOjiB,QAAQpF,OAAQ,CACvCopB,IAAM5pB,EAAE6nB,OAAOjiB,QAAQrE,WAAWvB,EAAE8nB,WAAa,QAC5C,CACL8B,IAAM,EAER/F,SAAS7jB,EAAG4pB,WACLA,MAAQ,EAEjB,IAAI5pB,EAAE6nB,OAAOiC,MAAQ9pB,EAAEojB,QAAUuG,IAAK,CACpCxO,KAAKoE,MAAQnd,MAAM+Y,KAAKoE,MAAOvf,EAAEqjB,YAAarjB,EAAEojB,QAAUuG,IAAKA,KAEjE,GAAIC,MAAQ,EAAG,CACb5pB,EAAEqb,OAASkH,gBAGV,CACHviB,EAAEqb,OAASkH,YAGf,GAAIviB,EAAEqb,SAAWkH,WAAY,CAC3B,GAAIviB,EAAE6nB,OAAOiC,KAAM,CACjB,GAAI9pB,EAAEojB,QAAU,EAAIpjB,EAAEqmB,iBAAkB,CACtCnD,cAAc/H,MAEhB,GAAInb,EAAEojB,QAAU,GAAKpjB,EAAEqmB,iBAAkB,CACvCxC,SAAS7jB,EAAGmb,KAAKoE,MAAQ,IACzBsE,UAAS7jB,EAAImb,KAAKoE,OAAS,EAAK,IAChCpE,MAAKoE,MAAQ,CACbvf,GAAEqb,OAASmH,gBAGV,CACHxiB,EAAEqb,OAASmH,YAMf,GAAIxiB,EAAEojB,UAAY,EAAG,CACnBF,cAAc/H,KACd,IAAIA,KAAKC,YAAc,EAAG,CAOxBpb,EAAE+nB,YAAc,CAChB,OAAO9N,WAOJ,IAAIkB,KAAKQ,WAAa,GAAKqH,KAAKmD,QAAUnD,KAAK0G,YACpDvD,QAAUnM,SAAU,CACpB,MAAOgB,KAAIG,KAAMiF,aAInB,GAAIpgB,EAAEqb,SAAWoH,cAAgBtH,KAAKQ,WAAa,EAAG,CACpD,MAAOX,KAAIG,KAAMiF,aAKnB,GAAIjF,KAAKQ,WAAa,GAAK3b,EAAEqlB,YAAc,GACxCc,QAAUpM,YAAc/Z,EAAEqb,SAAWoH,aAAe,CACrD,GAAI0H,QAAUnqB,EAAE2a,WAAa8F,eAAkB0G,aAAannB,EAAGmmB,OAC5DnmB,EAAE2a,WAAa+F,MAAQwG,YAAYlnB,EAAGmmB,OACrCuB,oBAAoB1nB,EAAEua,OAAOkN,KAAKznB,EAAGmmB,MAEzC,IAAIgE,SAAWvH,mBAAqBuH,SAAWtH,eAAgB,CAC7D7iB,EAAEqb,OAASoH,aAEb,GAAI0H,SAAWzH,cAAgByH,SAAWvH,kBAAmB,CAC3D,GAAIzH,KAAKC,YAAc,EAAG,CACxBpb,EAAE+nB,YAAc,EAGlB,MAAO9N,MAST,GAAIkQ,SAAWxH,cAAe,CAC5B,GAAIwD,QAAUxG,gBAAiB,CAC7ByB,MAAMgJ,UAAUpqB,OAEb,IAAImmB,QAAUrG,QAAS,CAE1BsB,MAAMiJ,iBAAiBrqB,EAAG,EAAG,EAAG,MAIhC,IAAImmB,QAAUtG,aAAc,CAE1BoD,KAAKjjB,EAAE6lB,KAEP,IAAI7lB,EAAEqlB,YAAc,EAAG,CACrBrlB,EAAE4jB,SAAW,CACb5jB,GAAE2jB,YAAc,CAChB3jB,GAAE8lB,OAAS,IAIjB5C,cAAc/H,KACd,IAAIA,KAAKC,YAAc,EAAG,CACxBpb,EAAE+nB,YAAc,CAChB,OAAO9N,QAOb,GAAIkM,QAAUnM,SAAU,CAAE,MAAOC,MACjC,GAAIja,EAAEgkB,MAAQ,EAAG,CAAE,MAAO9J,cAG1B,GAAIla,EAAEgkB,OAAS,EAAG,CAChBH,SAAS7jB,EAAGmb,KAAKoE,MAAQ,IACzBsE,UAAS7jB,EAAImb,KAAKoE,OAAS,EAAK,IAChCsE,UAAS7jB,EAAImb,KAAKoE,OAAS,GAAM,IACjCsE,UAAS7jB,EAAImb,KAAKoE,OAAS,GAAM,IACjCsE,UAAS7jB,EAAGmb,KAAK8I,SAAW,IAC5BJ,UAAS7jB,EAAImb,KAAK8I,UAAY,EAAK,IACnCJ,UAAS7jB,EAAImb,KAAK8I,UAAY,GAAM,IACpCJ,UAAS7jB,EAAImb,KAAK8I,UAAY,GAAM,SAGtC,CACEH,YAAY9jB,EAAGmb,KAAKoE,QAAU,GAC9BuE,aAAY9jB,EAAGmb,KAAKoE,MAAQ,OAG9B2D,cAAc/H,KAId,IAAInb,EAAEgkB,KAAO,EAAG,CAAEhkB,EAAEgkB,MAAQhkB,EAAEgkB,KAE9B,MAAOhkB,GAAEojB,UAAY,EAAInJ,KAAOC,aAGlC,QAASgC,YAAWf,MAClB,GAAIE,OAEJ,KAAKF,OAAsBA,KAAKgI,MAAoB,CAClD,MAAOjD,gBAGT7E,OAASF,KAAKgI,MAAM9H,MACpB,IAAIA,SAAW8G,YACb9G,SAAW+G,aACX/G,SAAWgH,YACXhH,SAAWiH,eACXjH,SAAWkH,YACXlH,SAAWmH,YACXnH,SAAWoH,aACX,CACA,MAAOzH,KAAIG,KAAM+E,gBAGnB/E,KAAKgI,MAAQ,IAEb,OAAO9H,UAAWmH,WAAaxH,IAAIG,KAAMgF,cAAgBlG,KAU3D7a,QAAQqqB,YAAcA,WACtBrqB,SAAQkc,aAAeA,YACvBlc,SAAQoqB,aAAeA,YACvBpqB,SAAQiqB,iBAAmBA,gBAC3BjqB,SAAQmc,iBAAmBA,gBAC3Bnc,SAAQ+Z,QAAUA,OAClB/Z,SAAQ8c,WAAaA,UACrB9c,SAAQkrB,YAAc,uCAWnBC,kBAAkB,GAAGC,YAAY,GAAG3a,UAAU,GAAG4a,aAAa,GAAGC,UAAU,KAAKC,IAAI,SAASjqB,QAAQrB,OAAOD,SAC/G,YAGA,SAASwrB,YAEP3oB,KAAK4nB,KAAa,CAElB5nB,MAAK+nB,KAAa,CAElB/nB,MAAK4oB,OAAa,CAElB5oB,MAAKgoB,GAAa,CAElBhoB,MAAK8nB,MAAa,IAElB9nB,MAAK6oB,UAAa,CAWlB7oB,MAAK8I,KAAa,EAIlB9I,MAAK2D,QAAa,EAIlB3D,MAAK6nB,KAAa,CAElB7nB,MAAK8oB,KAAa,MAGpB1rB,OAAOD,QAAUwrB,cACXI,IAAI,SAAStqB,QAAQrB,OAAOD,SAClC,YAGA,IAAI6rB,KAAM,EACV,IAAIC,MAAO,EAqCX7rB,QAAOD,QAAU,QAAS+rB,cAAahQ,KAAMzC,OAC3C,GAAIyK,MACJ,IAAIiI,IACJ,IAAI3H,KACJ,IAAI4H,KACJ,IAAI1B,IACJ,IAAIzI,IAEJ,IAAIoK,KAEJ,IAAIC,MACJ,IAAIC,MACJ,IAAIC,MACJ,IAAIhsB,OACJ,IAAIisB,KACJ,IAAIC,KACJ,IAAIC,MACJ,IAAIC,MACJ,IAAIC,MACJ,IAAIC,MACJ,IAAIC,KACJ,IAAIC,GAEJ,IAAIlZ,IACJ,IAAImZ,KACJ,IAAIxU,KACJ,IAAIyU,YAGJ,IAAItrB,OAAOE,MAGXoiB,OAAQhI,KAAKgI,KAEbiI,KAAMjQ,KAAKO,OACX7a,OAAQsa,KAAKta,KACb4iB,MAAO2H,KAAOjQ,KAAKQ,SAAW,EAC9B0P,MAAOlQ,KAAKU,QACZ9a,QAASoa,KAAKpa,MACd4oB,KAAM0B,MAAQ3S,MAAQyC,KAAKC,UAC3B8F,KAAMmK,MAAQlQ,KAAKC,UAAY,IAE/BkQ,MAAOnI,MAAMmI,IAEbC,OAAQpI,MAAMoI,KACdC,OAAQrI,MAAMqI,KACdC,OAAQtI,MAAMsI,KACdhsB,QAAS0jB,MAAM1jB,MACfisB,MAAOvI,MAAMuI,IACbC,MAAOxI,MAAMwI,IACbC,OAAQzI,MAAMiJ,OACdP,OAAQ1I,MAAMkJ,QACdP,QAAS,GAAK3I,MAAMmJ,SAAW,CAC/BP,QAAS,GAAK5I,MAAMoJ,UAAY,CAMhCC,KACA,EAAG,CACD,GAAIb,KAAO,GAAI,CACbD,MAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,CACRD,OAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,EAGVK,KAAOJ,MAAMF,KAAOI,MAEpBW,OACA,OAAS,CACPR,GAAKD,OAAS,EACdN,SAAUO,EACVN,OAAQM,EACRA,IAAMD,OAAS,GAAM,GACrB,IAAIC,KAAO,EAAG,CAIZlrB,OAAOsqB,QAAUW,KAAO,UAErB,IAAIC,GAAK,GAAI,CAChBlZ,IAAMiZ,KAAO,KACbC,KAAM,EACN,IAAIA,GAAI,CACN,GAAIN,KAAOM,GAAI,CACbP,MAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,EAEV5Y,KAAO2Y,MAAS,GAAKO,IAAM,CAC3BP,SAAUO,EACVN,OAAQM,GAGV,GAAIN,KAAO,GAAI,CACbD,MAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,CACRD,OAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,EAEVK,KAAOH,MAAMH,KAAOK,MAEpBW,QACA,OAAS,CACPT,GAAKD,OAAS,EACdN,SAAUO,EACVN,OAAQM,EACRA,IAAMD,OAAS,GAAM,GAErB,IAAIC,GAAK,GAAI,CACXC,KAAOF,KAAO,KACdC,KAAM,EACN,IAAIN,KAAOM,GAAI,CACbP,MAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,CACR,IAAIA,KAAOM,GAAI,CACbP,MAAQ7qB,MAAMuqB,QAAUO,IACxBA,OAAQ,GAGZO,MAAQR,MAAS,GAAKO,IAAM,CAE5B,IAAIC,KAAOZ,KAAM,CACfnQ,KAAKtB,IAAM,+BACXsJ,OAAM3H,KAAOyP,GACb,MAAMuB,KAGRd,QAAUO,EACVN,OAAQM,EAERA,IAAKZ,KAAO1B,GACZ,IAAIuC,KAAOD,GAAI,CACbA,GAAKC,KAAOD,EACZ,IAAIA,GAAKT,MAAO,CACd,GAAIrI,MAAMwJ,KAAM,CACdxR,KAAKtB,IAAM,+BACXsJ,OAAM3H,KAAOyP,GACb,MAAMuB,MAyBV9U,KAAO,CACPyU,aAAc1sB,MACd,IAAIgsB,QAAU,EAAG,CACf/T,MAAQ6T,MAAQU,EAChB,IAAIA,GAAKlZ,IAAK,CACZA,KAAOkZ,EACP,GAAG,CACDlrB,OAAOsqB,QAAU5rB,OAAOiY,gBACfuU,GACXvU,MAAO2T,KAAOa,IACdC,aAAcprB,YAGb,IAAI0qB,MAAQQ,GAAI,CACnBvU,MAAQ6T,MAAQE,MAAQQ,EACxBA,KAAMR,KACN,IAAIQ,GAAKlZ,IAAK,CACZA,KAAOkZ,EACP,GAAG,CACDlrB,OAAOsqB,QAAU5rB,OAAOiY,gBACfuU,GACXvU,MAAO,CACP,IAAI+T,MAAQ1Y,IAAK,CACfkZ,GAAKR,KACL1Y,MAAOkZ,EACP,GAAG,CACDlrB,OAAOsqB,QAAU5rB,OAAOiY,gBACfuU,GACXvU,MAAO2T,KAAOa,IACdC,aAAcprB,aAIf,CACH2W,MAAQ+T,MAAQQ,EAChB,IAAIA,GAAKlZ,IAAK,CACZA,KAAOkZ,EACP,GAAG,CACDlrB,OAAOsqB,QAAU5rB,OAAOiY,gBACfuU,GACXvU,MAAO2T,KAAOa,IACdC,aAAcprB,QAGlB,MAAOgS,IAAM,EAAG,CACdhS,OAAOsqB,QAAUc,YAAYzU,OAC7B3W,QAAOsqB,QAAUc,YAAYzU,OAC7B3W,QAAOsqB,QAAUc,YAAYzU,OAC7B3E,MAAO,EAET,GAAIA,IAAK,CACPhS,OAAOsqB,QAAUc,YAAYzU,OAC7B,IAAI3E,IAAM,EAAG,CACXhS,OAAOsqB,QAAUc,YAAYzU,cAI9B,CACHA,KAAO2T,KAAOa,IACd,GAAG,CACDnrB,OAAOsqB,QAAUtqB,OAAO2W,OACxB3W,QAAOsqB,QAAUtqB,OAAO2W,OACxB3W,QAAOsqB,QAAUtqB,OAAO2W,OACxB3E,MAAO,QACAA,IAAM,EACf,IAAIA,IAAK,CACPhS,OAAOsqB,QAAUtqB,OAAO2W,OACxB,IAAI3E,IAAM,EAAG,CACXhS,OAAOsqB,QAAUtqB,OAAO2W,eAK3B,KAAKuU,GAAK,MAAQ,EAAG,CACxBD,KAAOH,OAAOG,KAAO,QAAuBN,MAAS,GAAKO,IAAM,GAChE,SAASS,YAEN,CACHvR,KAAKtB,IAAM,uBACXsJ,OAAM3H,KAAOyP,GACb,MAAMuB,KAGR,WAGC,KAAKP,GAAK,MAAQ,EAAG,CACxBD,KAAOJ,OAAOI,KAAO,QAAuBN,MAAS,GAAKO,IAAM,GAChE,SAASQ,WAEN,IAAIR,GAAK,GAAI,CAEhB9I,MAAM3H,KAAO0P,IACb,MAAMsB,SAEH,CACHrR,KAAKtB,IAAM,6BACXsJ,OAAM3H,KAAOyP,GACb,MAAMuB,KAGR,aAEKpB,IAAM3H,MAAQ4H,KAAOnK,IAG9BnO,KAAM4Y,MAAQ,CACdP,MAAOrY,GACP4Y,OAAQ5Y,KAAO,CACf2Y,QAAS,GAAKC,MAAQ,CAGtBxQ,MAAKO,QAAU0P,GACfjQ,MAAKU,SAAWwP,IAChBlQ,MAAKQ,SAAYyP,IAAM3H,KAAO,GAAKA,KAAO2H,KAAO,GAAKA,IAAM3H,KAC5DtI,MAAKC,UAAaiQ,KAAOnK,IAAM,KAAOA,IAAMmK,MAAQ,KAAOA,KAAOnK,IAClEiC,OAAMuI,KAAOA,IACbvI,OAAMwI,KAAOA,IACb,cAGIiB,IAAI,SAASlsB,QAAQrB,OAAOD,SAClC,YAGA,IAAIiE,OAAQ3C,QAAQ,kBACpB,IAAI4e,SAAU5e,QAAQ,YACtB,IAAI0B,OAAU1B,QAAQ,UACtB,IAAIyqB,cAAezqB,QAAQ,YAC3B,IAAImsB,eAAgBnsB,QAAQ,aAE5B,IAAIosB,OAAQ,CACZ,IAAIC,MAAO,CACX,IAAIC,OAAQ,CAWZ,IAAIhT,UAAkB,CACtB,IAAI8F,SAAkB,CACtB,IAAIC,SAAkB,CAMtB,IAAI9F,MAAkB,CACtB,IAAIC,cAAkB,CACtB,IAAI8F,aAAkB,CAEtB,IAAIE,iBAAmB,CACvB,IAAIC,eAAmB,CACvB,IAAI8M,cAAmB,CACvB,IAAI7M,cAAmB,CAIvB,IAAI/F,YAAc,CAOlB,IAAO6S,MAAO,CACd,IAAOC,OAAQ,CACf,IAAOC,MAAO,CACd,IAAOC,IAAK,CACZ,IAAOC,OAAQ,CACf,IAAOC,OAAQ,CACf,IAAOC,MAAO,CACd,IAAOC,SAAU,CACjB,IAAOC,MAAO,CACd,IAAOC,QAAS,EAChB,IAAOC,MAAO,EACd,IAAW1C,MAAO,EAClB,IAAW2C,QAAS,EACpB,IAAWC,QAAS,EACpB,IAAWC,OAAQ,EACnB,IAAWC,MAAO,EAClB,IAAWC,OAAQ,EACnB,IAAWC,SAAU,EACrB,IAAWC,UAAW,EACtB,IAAeC,MAAO,EACtB,IAAeC,KAAM,EACrB,IAAeC,QAAS,EACxB,IAAeC,MAAO,EACtB,IAAeC,SAAU,EACzB,IAAeC,OAAQ,EACvB,IAAeC,KAAM,EACrB,IAAOC,OAAQ,EACf,IAAOC,QAAS,EAChB,IAAOC,MAAO,EACd,IAAO5D,KAAM,EACb,IAAO6D,KAAM,EACb,IAAOC,MAAO,EAMd,IAAIC,aAAc,GAClB,IAAIC,cAAe,GAGnB,IAAI3N,WAAY,EAEhB,IAAI4N,WAAY5N,SAGhB,SAAS6N,SAAQC,GACf,OAAWA,IAAM,GAAM,MACbA,IAAM,EAAK,SACXA,EAAI,QAAW,KACfA,EAAI,MAAS,IAIzB,QAASC,gBACPptB,KAAKuZ,KAAO,CACZvZ,MAAKwhB,KAAO,KACZxhB,MAAK+hB,KAAO,CACZ/hB,MAAKqtB,SAAW,KAChBrtB,MAAKstB,MAAQ,CACbttB,MAAKqpB,KAAO,CACZrpB,MAAKutB,MAAQ,CACbvtB,MAAKwtB,MAAQ,CAEbxtB,MAAK4jB,KAAO,IAGZ5jB,MAAKytB,MAAQ,CACbztB,MAAKspB,MAAQ,CACbtpB,MAAKupB,MAAQ,CACbvpB,MAAKwpB,MAAQ,CACbxpB,MAAKxC,OAAS,IAGdwC,MAAKypB,KAAO,CACZzpB,MAAK0pB,KAAO,CAGZ1pB,MAAKzB,OAAS,CACdyB,MAAKmC,OAAS,CAGdnC,MAAK8nB,MAAQ,CAGb9nB,MAAKmqB,QAAU,IACfnqB,MAAKoqB,SAAW,IAChBpqB,MAAKqqB,QAAU,CACfrqB,MAAKsqB,SAAW,CAGhBtqB,MAAK0tB,MAAQ,CACb1tB,MAAK2tB,KAAO,CACZ3tB,MAAK4tB,MAAQ,CACb5tB,MAAK6tB,KAAO,CACZ7tB,MAAK8tB,KAAO,IAEZ9tB,MAAK+tB,KAAO,GAAI3sB,OAAMyb,MAAM,IAC5B7c,MAAKguB,KAAO,GAAI5sB,OAAMyb,MAAM,IAO5B7c,MAAKiuB,OAAS,IACdjuB,MAAKkuB,QAAU,IACfluB,MAAK0qB,KAAO,CACZ1qB,MAAKmuB,KAAO,CACZnuB,MAAKouB,IAAM,EAGb,QAASC,kBAAiBnV,MACxB,GAAIgI,MAEJ,KAAKhI,OAASA,KAAKgI,MAAO,CAAE,MAAOjD,gBACnCiD,MAAQhI,KAAKgI,KACbhI,MAAK8I,SAAW9I,KAAKoI,UAAYJ,MAAMsM,MAAQ,CAC/CtU,MAAKtB,IAAM,EACX,IAAIsJ,MAAMa,KAAM,CACd7I,KAAKoE,MAAQ4D,MAAMa,KAAO,EAE5Bb,MAAM3H,KAAO0R,IACb/J,OAAMM,KAAO,CACbN,OAAMmM,SAAW,CACjBnM,OAAMmI,KAAO,KACbnI,OAAM0C,KAAO,IACb1C,OAAMuI,KAAO,CACbvI,OAAMwI,KAAO,CAEbxI,OAAMiJ,QAAUjJ,MAAM+M,OAAS,GAAI7sB,OAAM0b,MAAMiQ,YAC/C7L,OAAMkJ,SAAWlJ,MAAMgN,QAAU,GAAI9sB,OAAM0b,MAAMkQ,aAEjD9L,OAAMwJ,KAAO,CACbxJ,OAAMiN,MAAQ,CAEd,OAAOnW,MAGT,QAASsW,cAAapV,MACpB,GAAIgI,MAEJ,KAAKhI,OAASA,KAAKgI,MAAO,CAAE,MAAOjD,gBACnCiD,MAAQhI,KAAKgI,KACbA,OAAMoI,MAAQ,CACdpI,OAAMqI,MAAQ,CACdrI,OAAMsI,MAAQ,CACd,OAAO6E,kBAAiBnV,MAI1B,QAASqV,eAAcrV,KAAMV,YAC3B,GAAIuJ,KACJ,IAAIb,MAGJ,KAAKhI,OAASA,KAAKgI,MAAO,CAAE,MAAOjD,gBACnCiD,MAAQhI,KAAKgI,KAGb,IAAI1I,WAAa,EAAG,CAClBuJ,KAAO,CACPvJ,aAAcA,eAEX,CACHuJ,MAAQvJ,YAAc,GAAK,CAC3B,IAAIA,WAAa,GAAI,CACnBA,YAAc,IAKlB,GAAIA,aAAeA,WAAa,GAAKA,WAAa,IAAK,CACrD,MAAOyF,gBAET,GAAIiD,MAAM1jB,SAAW,MAAQ0jB,MAAMuM,QAAUjV,WAAY,CACvD0I,MAAM1jB,OAAS,KAIjB0jB,MAAMa,KAAOA,IACbb,OAAMuM,MAAQjV,UACd,OAAO8V,cAAapV,MAGtB,QAAS2B,cAAa3B,KAAMV,YAC1B,GAAI/L,IACJ,IAAIyU,MAEJ,KAAKhI,KAAM,CAAE,MAAO+E,gBAGpBiD,MAAQ,GAAIkM,aAIZlU,MAAKgI,MAAQA,KACbA,OAAM1jB,OAAS,IACfiP,KAAM8hB,cAAcrV,KAAMV,WAC1B,IAAI/L,MAAQuL,KAAM,CAChBkB,KAAKgI,MAAQ,KAEf,MAAOzU,KAGT,QAAS+hB,aAAYtV,MACnB,MAAO2B,cAAa3B,KAAM+T,WAc5B,GAAIwB,QAAS,IAEb,IAAIC,QAAQC,OAEZ,SAASC,aAAY1N,OAEnB,GAAIuN,OAAQ,CACV,GAAII,IAEJH,QAAS,GAAIttB,OAAM0b,MAAM,IACzB6R,SAAU,GAAIvtB,OAAM0b,MAAM,GAG1B+R,KAAM,CACN,OAAOA,IAAM,IAAK,CAAE3N,MAAM6M,KAAKc,OAAS,EACxC,MAAOA,IAAM,IAAK,CAAE3N,MAAM6M,KAAKc,OAAS,EACxC,MAAOA,IAAM,IAAK,CAAE3N,MAAM6M,KAAKc,OAAS,EACxC,MAAOA,IAAM,IAAK,CAAE3N,MAAM6M,KAAKc,OAAS,EAExCjE,cAAcE,KAAO5J,MAAM6M,KAAM,EAAG,IAAKW,OAAU,EAAGxN,MAAM8M,MAAOtE,KAAM,GAGzEmF,KAAM,CACN,OAAOA,IAAM,GAAI,CAAE3N,MAAM6M,KAAKc,OAAS,EAEvCjE,cAAcG,MAAO7J,MAAM6M,KAAM,EAAG,GAAMY,QAAS,EAAGzN,MAAM8M,MAAOtE,KAAM,GAGzE+E,QAAS,MAGXvN,MAAMiJ,QAAUuE,MAChBxN,OAAMmJ,QAAU,CAChBnJ,OAAMkJ,SAAWuE,OACjBzN,OAAMoJ,SAAW,EAkBnB,QAASwE,cAAa5V,KAAMmD,IAAK4C,IAAK9W,MACpC,GAAI8hB,KACJ,IAAI/I,OAAQhI,KAAKgI,KAGjB,IAAIA,MAAM1jB,SAAW,KAAM,CACzB0jB,MAAMoI,MAAQ,GAAKpI,MAAMuM,KACzBvM,OAAMsI,MAAQ,CACdtI,OAAMqI,MAAQ,CAEdrI,OAAM1jB,OAAS,GAAI4D,OAAMuY,KAAKuH,MAAMoI,OAItC,GAAInhB,MAAQ+Y,MAAMoI,MAAO,CACvBloB,MAAM+Z,SAAS+F,MAAM1jB,OAAO6e,IAAK4C,IAAMiC,MAAMoI,MAAOpI,MAAMoI,MAAO,EACjEpI,OAAMsI,MAAQ,CACdtI,OAAMqI,MAAQrI,MAAMoI,UAEjB,CACHW,KAAO/I,MAAMoI,MAAQpI,MAAMsI,KAC3B,IAAIS,KAAO9hB,KAAM,CACf8hB,KAAO9hB,KAGT/G,MAAM+Z,SAAS+F,MAAM1jB,OAAO6e,IAAK4C,IAAM9W,KAAM8hB,KAAM/I,MAAMsI,MACzDrhB,OAAQ8hB,IACR,IAAI9hB,KAAM,CAER/G,MAAM+Z,SAAS+F,MAAM1jB,OAAO6e,IAAK4C,IAAM9W,KAAMA,KAAM,EACnD+Y,OAAMsI,MAAQrhB,IACd+Y,OAAMqI,MAAQrI,MAAMoI,UAEjB,CACHpI,MAAMsI,OAASS,IACf,IAAI/I,MAAMsI,QAAUtI,MAAMoI,MAAO,CAAEpI,MAAMsI,MAAQ,EACjD,GAAItI,MAAMqI,MAAQrI,MAAMoI,MAAO,CAAEpI,MAAMqI,OAASU,OAGpD,MAAO,GAGT,QAAS9S,SAAQ+B,KAAMgL,OACrB,GAAIhD,MACJ,IAAItiB,OAAOE,MACX,IAAIgvB,KACJ,IAAIiB,IACJ,IAAIlB,MAAMmB,IACV,IAAIvF,KACJ,IAAIC,KACJ,IAAIP,KAAKC,IACT,IAAIjhB,KACJ,IAAIsN,KACJ,IAAIyU,YACJ,IAAIH,MAAO,CACX,IAAIkF,WAAWC,QAASC,QAExB,IAAIC,WAAWC,QAASC,QACxB,IAAIxe,IACJ,IAAIrE,IACJ,IAAI8iB,MAAO,GAAInuB,OAAMuY,KAAK,EAC1B,IAAI6V,KAEJ,IAAI3xB,EAEJ,IAAI4xB,QACD,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAGjE,KAAKvW,OAASA,KAAKgI,QAAUhI,KAAKpa,SAC5Boa,KAAKta,OAASsa,KAAKQ,WAAa,EAAI,CACxC,MAAOuE,gBAGTiD,MAAQhI,KAAKgI,KACb,IAAIA,MAAM3H,OAAS0P,KAAM,CAAE/H,MAAM3H,KAAOqS,OAIxCmD,IAAM7V,KAAKU,QACX9a,QAASoa,KAAKpa,MACdkwB,MAAO9V,KAAKC,SACZ2U,MAAO5U,KAAKO,OACZ7a,OAAQsa,KAAKta,KACbivB,MAAO3U,KAAKQ,QACZ+P,MAAOvI,MAAMuI,IACbC,MAAOxI,MAAMwI,IAGbP,KAAM0E,IACNzE,MAAO4F,IACPviB,KAAMuL,IAEN0X,WACA,OAAS,CACP,OAAQxO,MAAM3H,MACd,IAAK0R,MACH,GAAI/J,MAAMa,OAAS,EAAG,CACpBb,MAAM3H,KAAOqS,MACb,OAGF,MAAOlC,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAKxI,MAAMa,KAAO,GAAM0H,OAAS,MAAQ,CACvCvI,MAAMqM,MAAQ,CAEdgC,MAAK,GAAK9F,KAAO,GACjB8F,MAAK,GAAM9F,OAAS,EAAK,GACzBvI,OAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAOgC,KAAM,EAAG,EAI1C9F,MAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAO2R,KACb,OAEFhK,MAAMoM,MAAQ,CACd,IAAIpM,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKkF,KAAO,MAEpB,KAAM5H,MAAMa,KAAO,OACd0H,KAAO,MAAoB,IAAMA,MAAQ,IAAM,GAAI,CACtDvQ,KAAKtB,IAAM,wBACXsJ,OAAM3H,KAAOyP,GACb,OAEF,IAAKS,KAAO,MAAqBrR,WAAY,CAC3Cc,KAAKtB,IAAM,4BACXsJ,OAAM3H,KAAOyP,GACb,OAGFS,QAAU,CACVC,OAAQ,CAER5Y,MAAO2Y,KAAO,IAAmB,CACjC,IAAIvI,MAAMuM,QAAU,EAAG,CACrBvM,MAAMuM,MAAQ3c,QAEX,IAAIA,IAAMoQ,MAAMuM,MAAO,CAC1BvU,KAAKtB,IAAM,qBACXsJ,OAAM3H,KAAOyP,GACb,OAEF9H,MAAMmI,KAAO,GAAKvY,GAElBoI,MAAKoE,MAAQ4D,MAAMqM,MAAQ,CAC3BrM,OAAM3H,KAAOkQ,KAAO,IAAQiC,OAASzC,IAErCQ,MAAO,CACPC,MAAO,CAEP,MACF,KAAKwB,OAEH,MAAOxB,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAMoM,MAAQ7D,IACd,KAAKvI,MAAMoM,MAAQ,OAAUlV,WAAY,CACvCc,KAAKtB,IAAM,4BACXsJ,OAAM3H,KAAOyP,GACb,OAEF,GAAI9H,MAAMoM,MAAQ,MAAQ,CACxBpU,KAAKtB,IAAM,0BACXsJ,OAAM3H,KAAOyP,GACb,OAEF,GAAI9H,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKgE,KAAS6B,MAAQ,EAAK,EAEnC,GAAIvI,MAAMoM,MAAQ,IAAQ,CAExBiC,KAAK,GAAK9F,KAAO,GACjB8F,MAAK,GAAM9F,OAAS,EAAK,GACzBvI,OAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAOgC,KAAM,EAAG,GAI5C9F,KAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAO4R,IAEf,KAAKA,MAEH,MAAOzB,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAIxI,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKmE,KAAO0B,KAEpB,GAAIvI,MAAMoM,MAAQ,IAAQ,CAExBiC,KAAK,GAAK9F,KAAO,GACjB8F,MAAK,GAAM9F,OAAS,EAAK,GACzB8F,MAAK,GAAM9F,OAAS,GAAM,GAC1B8F,MAAK,GAAM9F,OAAS,GAAM,GAC1BvI,OAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAOgC,KAAM,EAAG,GAI5C9F,KAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAO6R,EAEf,KAAKA,IAEH,MAAO1B,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAIxI,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKgF,OAAUa,KAAO,GAC5BvI,OAAM0C,KAAKoE,GAAMyB,MAAQ,EAE3B,GAAIvI,MAAMoM,MAAQ,IAAQ,CAExBiC,KAAK,GAAK9F,KAAO,GACjB8F,MAAK,GAAM9F,OAAS,EAAK,GACzBvI,OAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAOgC,KAAM,EAAG,GAI5C9F,KAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAO8R,KAEf,KAAKA,OACH,GAAInK,MAAMoM,MAAQ,KAAQ,CAExB,MAAO5D,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAM3iB,OAASkrB,IACf,IAAIvI,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKiF,UAAYY,KAEzB,GAAIvI,MAAMoM,MAAQ,IAAQ,CAExBiC,KAAK,GAAK9F,KAAO,GACjB8F,MAAK,GAAM9F,OAAS,EAAK,GACzBvI,OAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAOgC,KAAM,EAAG,GAI5C9F,KAAO,CACPC,MAAO,MAGJ,IAAIxI,MAAM0C,KAAM,CACnB1C,MAAM0C,KAAKkE,MAAQ,KAErB5G,MAAM3H,KAAO+R,KAEf,KAAKA,OACH,GAAIpK,MAAMoM,MAAQ,KAAQ,CACxBnlB,KAAO+Y,MAAM3iB,MACb,IAAI4J,KAAO0lB,KAAM,CAAE1lB,KAAO0lB,KAC1B,GAAI1lB,KAAM,CACR,GAAI+Y,MAAM0C,KAAM,CACd9S,IAAMoQ,MAAM0C,KAAKiF,UAAY3H,MAAM3iB,MACnC,KAAK2iB,MAAM0C,KAAKkE,MAAO,CAErB5G,MAAM0C,KAAKkE,MAAQ,GAAI7X,OAAMiR,MAAM0C,KAAKiF,WAE1CznB,MAAM+Z,SACJ+F,MAAM0C,KAAKkE,MACXlpB,MACAkvB,KAGA3lB,KAEA2I,KAMJ,GAAIoQ,MAAMoM,MAAQ,IAAQ,CACxBpM,MAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAO3uB,MAAOuJ,KAAM2lB,MAEhDD,MAAQ1lB,IACR2lB,OAAQ3lB,IACR+Y,OAAM3iB,QAAU4J,KAElB,GAAI+Y,MAAM3iB,OAAQ,CAAE,KAAMmxB,YAE5BxO,MAAM3iB,OAAS,CACf2iB,OAAM3H,KAAOgS,IAEf,KAAKA,MACH,GAAIrK,MAAMoM,MAAQ,KAAQ,CACxB,GAAIO,OAAS,EAAG,CAAE,KAAM6B,WACxBvnB,KAAO,CACP,GAAG,CAED2I,IAAMlS,MAAMkvB,KAAO3lB,OAEnB,IAAI+Y,MAAM0C,MAAQ9S,KACboQ,MAAM3iB,OAAS,MAAgC,CAClD2iB,MAAM0C,KAAK9a,MAAQlJ,OAAOC,aAAaiR,YAElCA,KAAO3I,KAAO0lB,KAEvB,IAAI3M,MAAMoM,MAAQ,IAAQ,CACxBpM,MAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAO3uB,MAAOuJ,KAAM2lB,MAEhDD,MAAQ1lB,IACR2lB,OAAQ3lB,IACR,IAAI2I,IAAK,CAAE,KAAM4e,gBAEd,IAAIxO,MAAM0C,KAAM,CACnB1C,MAAM0C,KAAK9a,KAAO,KAEpBoY,MAAM3iB,OAAS,CACf2iB,OAAM3H,KAAOiS,OAEf,KAAKA,SACH,GAAItK,MAAMoM,MAAQ,KAAQ,CACxB,GAAIO,OAAS,EAAG,CAAE,KAAM6B,WACxBvnB,KAAO,CACP,GAAG,CACD2I,IAAMlS,MAAMkvB,KAAO3lB,OAEnB,IAAI+Y,MAAM0C,MAAQ9S,KACboQ,MAAM3iB,OAAS,MAAgC,CAClD2iB,MAAM0C,KAAKjgB,SAAW/D,OAAOC,aAAaiR,YAErCA,KAAO3I,KAAO0lB,KACvB,IAAI3M,MAAMoM,MAAQ,IAAQ,CACxBpM,MAAMqM,MAAQptB,MAAM+gB,MAAMqM,MAAO3uB,MAAOuJ,KAAM2lB,MAEhDD,MAAQ1lB,IACR2lB,OAAQ3lB,IACR,IAAI2I,IAAK,CAAE,KAAM4e,gBAEd,IAAIxO,MAAM0C,KAAM,CACnB1C,MAAM0C,KAAKjgB,QAAU,KAEvBud,MAAM3H,KAAOkS,IAEf,KAAKA,MACH,GAAIvK,MAAMoM,MAAQ,IAAQ,CAExB,MAAO5D,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAID,QAAUvI,MAAMqM,MAAQ,OAAS,CACnCrU,KAAKtB,IAAM,qBACXsJ,OAAM3H,KAAOyP,GACb,OAGFS,KAAO,CACPC,MAAO,EAGT,GAAIxI,MAAM0C,KAAM,CACd1C,MAAM0C,KAAKiE,KAAS3G,MAAMoM,OAAS,EAAK,CACxCpM,OAAM0C,KAAKkF,KAAO,KAEpB5P,KAAKoE,MAAQ4D,MAAMqM,MAAQ,CAC3BrM,OAAM3H,KAAO0P,IACb,MACF,KAAKyC,QAEH,MAAOhC,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxQ,KAAKoE,MAAQ4D,MAAMqM,MAAQL,QAAQzD,KAEnCA,MAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAOoS,IAEf,KAAKA,MACH,GAAIzK,MAAMmM,WAAa,EAAG,CAExBnU,KAAKU,SAAWmV,GAChB7V,MAAKC,UAAY6V,IACjB9V,MAAKO,QAAUqU,IACf5U,MAAKQ,SAAWmU,IAChB3M,OAAMuI,KAAOA,IACbvI,OAAMwI,KAAOA,IAEb,OAAO3L,aAET7E,KAAKoE,MAAQ4D,MAAMqM,MAAQ,CAC3BrM,OAAM3H,KAAO0P,IAEf,KAAKA,MACH,GAAI/E,QAAUrG,SAAWqG,QAAUpG,QAAS,CAAE,KAAM4R,WAEtD,IAAK9D,QACH,GAAI1K,MAAMM,KAAM,CAEdiI,QAAUC,KAAO,CACjBA,OAAQA,KAAO,CAEfxI,OAAM3H,KAAOmT,KACb,OAGF,MAAOhD,KAAO,EAAG,CACf,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAMM,KAAQiI,KAAO,CAErBA,SAAU,CACVC,OAAQ,CAGR,QAASD,KAAO,GAChB,IAAK,GAGHvI,MAAM3H,KAAOsS,MACb,MACF,KAAK,GACH+C,YAAY1N,MAGZA,OAAM3H,KAAO4S,IACb,IAAIjI,QAAUpG,QAAS,CAErB2L,QAAU,CACVC,OAAQ,CAER,MAAMgG,WAER,KACF,KAAK,GAGHxO,MAAM3H,KAAOyS,KACb,MACF,KAAK,GACH9S,KAAKtB,IAAM,oBACXsJ,OAAM3H,KAAOyP,IAGfS,QAAU,CACVC,OAAQ,CAER,MACF,KAAKmC,QAEHpC,QAAUC,KAAO,CACjBA,OAAQA,KAAO,CAGf,OAAOA,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,IAAKD,KAAO,UAAcA,OAAS,GAAM,OAAS,CAChDvQ,KAAKtB,IAAM,8BACXsJ,OAAM3H,KAAOyP,GACb,OAEF9H,MAAM3iB,OAASkrB,KAAO,KAItBA,MAAO,CACPC,MAAO,CAEPxI,OAAM3H,KAAOuS,KACb,IAAI5H,QAAUpG,QAAS,CAAE,KAAM4R,WAEjC,IAAK5D,OACH5K,MAAM3H,KAAOwS,IAEf,KAAKA,MACH5jB,KAAO+Y,MAAM3iB,MACb,IAAI4J,KAAM,CACR,GAAIA,KAAO0lB,KAAM,CAAE1lB,KAAO0lB,KAC1B,GAAI1lB,KAAO6mB,KAAM,CAAE7mB,KAAO6mB,KAC1B,GAAI7mB,OAAS,EAAG,CAAE,KAAMunB,WAExBtuB,MAAM+Z,SAASrc,OAAQF,MAAOkvB,KAAM3lB,KAAM4mB,IAE1ClB,OAAQ1lB,IACR2lB,OAAQ3lB,IACR6mB,OAAQ7mB,IACR4mB,MAAO5mB,IACP+Y,OAAM3iB,QAAU4J,IAChB,OAGF+Y,MAAM3H,KAAO0P,IACb,MACF,KAAK+C,OAEH,MAAOtC,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAMyM,MAAQlE,KAAO,IAAmB,GAExCA,SAAU,CACVC,OAAQ,CAERxI,OAAM0M,OAASnE,KAAO,IAAmB,CAEzCA,SAAU,CACVC,OAAQ,CAERxI,OAAMwM,OAASjE,KAAO,IAAmB,CAEzCA,SAAU,CACVC,OAAQ,CAGR,IAAIxI,MAAMyM,KAAO,KAAOzM,MAAM0M,MAAQ,GAAI,CACxC1U,KAAKtB,IAAM,qCACXsJ,OAAM3H,KAAOyP,GACb,OAIF9H,MAAM2M,KAAO,CACb3M,OAAM3H,KAAO0S,OAEf,KAAKA,SACH,MAAO/K,MAAM2M,KAAO3M,MAAMwM,MAAO,CAE/B,MAAOhE,KAAO,EAAG,CACf,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAM6M,KAAK0B,MAAMvO,MAAM2M,SAAYpE,KAAO,CAE1CA,SAAU,CACVC,OAAQ,EAGV,MAAOxI,MAAM2M,KAAO,GAAI,CACtB3M,MAAM6M,KAAK0B,MAAMvO,MAAM2M,SAAW,EAMpC3M,MAAMiJ,QAAUjJ,MAAM+M,MACtB/M,OAAMmJ,QAAU,CAEhBmF,OAAQ9F,KAAMxI,MAAMmJ,QACpB5d,KAAMme,cAAcC,MAAO3J,MAAM6M,KAAM,EAAG,GAAI7M,MAAMiJ,QAAS,EAAGjJ,MAAM8M,KAAMwB,KAC5EtO,OAAMmJ,QAAUmF,KAAK9F,IAErB,IAAIjd,IAAK,CACPyM,KAAKtB,IAAM,0BACXsJ,OAAM3H,KAAOyP,GACb,OAGF9H,MAAM2M,KAAO,CACb3M,OAAM3H,KAAO2S,QAEf,KAAKA,UACH,MAAOhL,MAAM2M,KAAO3M,MAAMyM,KAAOzM,MAAM0M,MAAO,CAC5C,OAAS,CACP7D,KAAO7I,MAAMiJ,QAAQV,MAAS,GAAKvI,MAAMmJ,SAAW,EACpD4E,WAAYlF,OAAS,EACrBmF,SAAWnF,OAAS,GAAM,GAC1BoF,UAAWpF,KAAO,KAElB,IAAI,WAAeL,KAAM,CAAE,MAE3B,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAIyF,SAAW,GAAI,CAEjB1F,QAAUwF,SACVvF,OAAQuF,SAER/N,OAAM6M,KAAK7M,MAAM2M,QAAUsB,aAExB,CACH,GAAIA,WAAa,GAAI,CAEnBtxB,EAAIoxB,UAAY,CAChB,OAAOvF,KAAO7rB,EAAG,CACf,GAAIgwB,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAIVD,QAAUwF,SACVvF,OAAQuF,SAER,IAAI/N,MAAM2M,OAAS,EAAG,CACpB3U,KAAKtB,IAAM,2BACXsJ,OAAM3H,KAAOyP,GACb,OAEFlY,IAAMoQ,MAAM6M,KAAK7M,MAAM2M,KAAO,EAC9B1lB,MAAO,GAAKshB,KAAO,EAEnBA,SAAU,CACVC,OAAQ,MAGL,IAAIyF,WAAa,GAAI,CAExBtxB,EAAIoxB,UAAY,CAChB,OAAOvF,KAAO7rB,EAAG,CACf,GAAIgwB,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAIVD,QAAUwF,SACVvF,OAAQuF,SAERne,KAAM,CACN3I,MAAO,GAAKshB,KAAO,EAEnBA,SAAU,CACVC,OAAQ,MAGL,CAEH7rB,EAAIoxB,UAAY,CAChB,OAAOvF,KAAO7rB,EAAG,CACf,GAAIgwB,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAIVD,QAAUwF,SACVvF,OAAQuF,SAERne,KAAM,CACN3I,MAAO,IAAMshB,KAAO,IAEpBA,SAAU,CACVC,OAAQ,EAGV,GAAIxI,MAAM2M,KAAO1lB,KAAO+Y,MAAMyM,KAAOzM,MAAM0M,MAAO,CAChD1U,KAAKtB,IAAM,2BACXsJ,OAAM3H,KAAOyP,GACb,OAEF,MAAO7gB,OAAQ,CACb+Y,MAAM6M,KAAK7M,MAAM2M,QAAU/c,MAMjC,GAAIoQ,MAAM3H,OAASyP,IAAK,CAAE,MAG1B,GAAI9H,MAAM6M,KAAK,OAAS,EAAG,CACzB7U,KAAKtB,IAAM,sCACXsJ,OAAM3H,KAAOyP,GACb,OAMF9H,MAAMmJ,QAAU,CAEhBmF,OAAQ9F,KAAMxI,MAAMmJ,QACpB5d,KAAMme,cAAcE,KAAM5J,MAAM6M,KAAM,EAAG7M,MAAMyM,KAAMzM,MAAMiJ,QAAS,EAAGjJ,MAAM8M,KAAMwB,KAGnFtO,OAAMmJ,QAAUmF,KAAK9F,IAGrB,IAAIjd,IAAK,CACPyM,KAAKtB,IAAM,6BACXsJ,OAAM3H,KAAOyP,GACb,OAGF9H,MAAMoJ,SAAW,CAGjBpJ,OAAMkJ,SAAWlJ,MAAMgN,OACvBsB,OAAQ9F,KAAMxI,MAAMoJ,SACpB7d,KAAMme,cAAcG,MAAO7J,MAAM6M,KAAM7M,MAAMyM,KAAMzM,MAAM0M,MAAO1M,MAAMkJ,SAAU,EAAGlJ,MAAM8M,KAAMwB,KAG/FtO,OAAMoJ,SAAWkF,KAAK9F,IAGtB,IAAIjd,IAAK,CACPyM,KAAKtB,IAAM,uBACXsJ,OAAM3H,KAAOyP,GACb,OAGF9H,MAAM3H,KAAO4S,IACb,IAAIjI,QAAUpG,QAAS,CAAE,KAAM4R,WAEjC,IAAKvD,MACHjL,MAAM3H,KAAO6S,GAEf,KAAKA,KACH,GAAIyB,MAAQ,GAAKmB,MAAQ,IAAK,CAE5B9V,KAAKU,SAAWmV,GAChB7V,MAAKC,UAAY6V,IACjB9V,MAAKO,QAAUqU,IACf5U,MAAKQ,SAAWmU,IAChB3M,OAAMuI,KAAOA,IACbvI,OAAMwI,KAAOA,IAEbR,cAAahQ,KAAMkQ,KAEnB2F,KAAM7V,KAAKU,QACX9a,QAASoa,KAAKpa,MACdkwB,MAAO9V,KAAKC,SACZ2U,MAAO5U,KAAKO,OACZ7a,OAAQsa,KAAKta,KACbivB,MAAO3U,KAAKQ,QACZ+P,MAAOvI,MAAMuI,IACbC,MAAOxI,MAAMwI,IAGb,IAAIxI,MAAM3H,OAAS0P,KAAM,CACvB/H,MAAMiN,MAAQ,EAEhB,MAEFjN,MAAMiN,KAAO,CACb,QAAS,CACPpE,KAAO7I,MAAMiJ,QAAQV,MAAS,GAAKvI,MAAMmJ,SAAU,EACnD4E,WAAYlF,OAAS,EACrBmF,SAAWnF,OAAS,GAAM,GAC1BoF,UAAWpF,KAAO,KAElB,IAAIkF,WAAavF,KAAM,CAAE,MAEzB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAIwF,UAAYA,QAAU,OAAU,EAAG,CACrCE,UAAYH,SACZI,SAAUH,OACVI,UAAWH,QACX,QAAS,CACPpF,KAAO7I,MAAMiJ,QAAQmF,WACX7F,MAAS,GAAM2F,UAAYC,SAAW,IAAoCD,WACpFH,WAAYlF,OAAS,EACrBmF,SAAWnF,OAAS,GAAM,GAC1BoF,UAAWpF,KAAO,KAElB,IAAKqF,UAAYH,WAAcvF,KAAM,CAAE,MAEvC,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAIVD,QAAU2F,SACV1F,OAAQ0F,SAERlO,OAAMiN,MAAQiB,UAGhB3F,QAAUwF,SACVvF,OAAQuF,SAER/N,OAAMiN,MAAQc,SACd/N,OAAM3iB,OAAS4wB,QACf,IAAID,UAAY,EAAG,CAIjBhO,MAAM3H,KAAOkT,GACb,OAEF,GAAIyC,QAAU,GAAI,CAEhBhO,MAAMiN,MAAQ,CACdjN,OAAM3H,KAAO0P,IACb,OAEF,GAAIiG,QAAU,GAAI,CAChBhW,KAAKtB,IAAM,6BACXsJ,OAAM3H,KAAOyP,GACb,OAEF9H,MAAM4G,MAAQoH,QAAU,EACxBhO,OAAM3H,KAAO8S,MAEf,KAAKA,QACH,GAAInL,MAAM4G,MAAO,CAEfjqB,EAAIqjB,MAAM4G,KACV,OAAO4B,KAAO7rB,EAAG,CACf,GAAIgwB,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAM3iB,QAAUkrB,MAAS,GAAKvI,MAAM4G,OAAQ,CAE5C2B,SAAUvI,MAAM4G,KAChB4B,OAAQxI,MAAM4G,KAEd5G,OAAMiN,MAAQjN,MAAM4G,MAGtB5G,MAAMkN,IAAMlN,MAAM3iB,MAClB2iB,OAAM3H,KAAO+S,IAEf,KAAKA,MACH,OAAS,CACPvC,KAAO7I,MAAMkJ,SAASX,MAAS,GAAKvI,MAAMoJ,UAAW,EACrD2E,WAAYlF,OAAS,EACrBmF,SAAWnF,OAAS,GAAM,GAC1BoF,UAAWpF,KAAO,KAElB,IAAI,WAAeL,KAAM,CAAE,MAE3B,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,IAAKwF,QAAU,OAAU,EAAG,CAC1BE,UAAYH,SACZI,SAAUH,OACVI,UAAWH,QACX,QAAS,CACPpF,KAAO7I,MAAMkJ,SAASkF,WACZ7F,MAAS,GAAM2F,UAAYC,SAAW,IAAoCD,WACpFH,WAAYlF,OAAS,EACrBmF,SAAWnF,OAAS,GAAM,GAC1BoF,UAAWpF,KAAO,KAElB,IAAKqF,UAAYH,WAAcvF,KAAM,CAAE,MAEvC,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAIVD,QAAU2F,SACV1F,OAAQ0F,SAERlO,OAAMiN,MAAQiB,UAGhB3F,QAAUwF,SACVvF,OAAQuF,SAER/N,OAAMiN,MAAQc,SACd,IAAIC,QAAU,GAAI,CAChBhW,KAAKtB,IAAM,uBACXsJ,OAAM3H,KAAOyP,GACb,OAEF9H,MAAM/e,OAASgtB,QACfjO,OAAM4G,MAAQ,QAAY,EAC1B5G,OAAM3H,KAAOgT,OAEf,KAAKA,SACH,GAAIrL,MAAM4G,MAAO,CAEfjqB,EAAIqjB,MAAM4G,KACV,OAAO4B,KAAO7rB,EAAG,CACf,GAAIgwB,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVxI,MAAM/e,QAAUsnB,MAAS,GAAKvI,MAAM4G,OAAQ,CAE5C2B,SAAUvI,MAAM4G,KAChB4B,OAAQxI,MAAM4G,KAEd5G,OAAMiN,MAAQjN,MAAM4G,MAGtB,GAAI5G,MAAM/e,OAAS+e,MAAMmI,KAAM,CAC7BnQ,KAAKtB,IAAM,+BACXsJ,OAAM3H,KAAOyP,GACb,OAIF9H,MAAM3H,KAAOiT,KAEf,KAAKA,OACH,GAAIwC,OAAS,EAAG,CAAE,KAAMU,WACxBvnB,KAAOihB,KAAO4F,IACd,IAAI9N,MAAM/e,OAASgG,KAAM,CACvBA,KAAO+Y,MAAM/e,OAASgG,IACtB,IAAIA,KAAO+Y,MAAMqI,MAAO,CACtB,GAAIrI,MAAMwJ,KAAM,CACdxR,KAAKtB,IAAM,+BACXsJ,OAAM3H,KAAOyP,GACb,QAkBJ,GAAI7gB,KAAO+Y,MAAMsI,MAAO,CACtBrhB,MAAQ+Y,MAAMsI,KACd/T,MAAOyL,MAAMoI,MAAQnhB,SAElB,CACHsN,KAAOyL,MAAMsI,MAAQrhB,KAEvB,GAAIA,KAAO+Y,MAAM3iB,OAAQ,CAAE4J,KAAO+Y,MAAM3iB,OACxC2rB,YAAchJ,MAAM1jB,WAEjB,CACH0sB,YAAcprB,MACd2W,MAAOsZ,IAAM7N,MAAM/e,MACnBgG,MAAO+Y,MAAM3iB,OAEf,GAAI4J,KAAO6mB,KAAM,CAAE7mB,KAAO6mB,KAC1BA,MAAQ7mB,IACR+Y,OAAM3iB,QAAU4J,IAChB,GAAG,CACDrJ,OAAOiwB,OAAS7E,YAAYzU,gBACnBtN,KACX,IAAI+Y,MAAM3iB,SAAW,EAAG,CAAE2iB,MAAM3H,KAAO6S,IACvC,KACF,KAAKK,KACH,GAAIuC,OAAS,EAAG,CAAE,KAAMU,WACxB5wB,OAAOiwB,OAAS7N,MAAM3iB,MACtBywB,OACA9N,OAAM3H,KAAO6S,GACb,MACF,KAAKM,OACH,GAAIxL,MAAMa,KAAM,CAEd,MAAO2H,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MAEApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGVN,MAAQ4F,IACR9V,MAAKoI,WAAa8H,IAClBlI,OAAMsM,OAASpE,IACf,IAAIA,KAAM,CACRlQ,KAAKoE,MAAQ4D,MAAMqM,MAEdrM,MAAMoM,MAAQntB,MAAM+gB,MAAMqM,MAAOzuB,OAAQsqB,KAAM2F,IAAM3F,MAAQ/L,QAAQ6D,MAAMqM,MAAOzuB,OAAQsqB,KAAM2F,IAAM3F,MAG7GA,KAAO4F,IAEP,KAAK9N,MAAMoM,MAAQ7D,KAAOyD,QAAQzD,SAAWvI,MAAMqM,MAAO,CACxDrU,KAAKtB,IAAM,sBACXsJ,OAAM3H,KAAOyP,GACb,OAGFS,KAAO,CACPC,MAAO,EAITxI,MAAM3H,KAAOoT,MAEf,KAAKA,QACH,GAAIzL,MAAMa,MAAQb,MAAMoM,MAAO,CAE7B,MAAO5D,KAAO,GAAI,CAChB,GAAImE,OAAS,EAAG,CAAE,KAAM6B,WACxB7B,MACApE,OAAQ7qB,MAAMkvB,SAAWpE,IACzBA,OAAQ,EAGV,GAAID,QAAUvI,MAAMsM,MAAQ,YAAa,CACvCtU,KAAKtB,IAAM,wBACXsJ,OAAM3H,KAAOyP,GACb,OAGFS,KAAO,CACPC,MAAO,EAITxI,MAAM3H,KAAOqT,IAEf,KAAKA,MACHngB,IAAMwL,YACN,MAAMyX,UACR,KAAK1G,KACHvc,IAAMyR,YACN,MAAMwR,UACR,KAAK7C,KACH,MAAO7B,YACT,KAAK8B,MAEL,QACE,MAAO7O,iBAcX/E,KAAKU,SAAWmV,GAChB7V,MAAKC,UAAY6V,IACjB9V,MAAKO,QAAUqU,IACf5U,MAAKQ,SAAWmU,IAChB3M,OAAMuI,KAAOA,IACbvI,OAAMwI,KAAOA,IAGb,IAAIxI,MAAMoI,OAAUF,OAASlQ,KAAKC,WAAa+H,MAAM3H,KAAOyP,MACvC9H,MAAM3H,KAAOmT,OAASxI,QAAUnM,UAAY,CAC/D,GAAI+W,aAAa5V,KAAMA,KAAKpa,OAAQoa,KAAKU,SAAUwP,KAAOlQ,KAAKC,WAAY,CACzE+H,MAAM3H,KAAOsT,GACb,OAAO7B,cAGX7B,KAAOjQ,KAAKQ,QACZ0P,OAAQlQ,KAAKC,SACbD,MAAK8I,UAAYmH,GACjBjQ,MAAKoI,WAAa8H,IAClBlI,OAAMsM,OAASpE,IACf,IAAIlI,MAAMa,MAAQqH,KAAM,CACtBlQ,KAAKoE,MAAQ4D,MAAMqM,MAChBrM,MAAMoM,MAAQntB,MAAM+gB,MAAMqM,MAAOzuB,OAAQsqB,KAAMlQ,KAAKU,SAAWwP,MAAQ/L,QAAQ6D,MAAMqM,MAAOzuB,OAAQsqB,KAAMlQ,KAAKU,SAAWwP,MAE/HlQ,KAAKmO,UAAYnG,MAAMwI,MAAQxI,MAAMM,KAAO,GAAK,IAC9BN,MAAM3H,OAAS0P,KAAO,IAAM,IAC5B/H,MAAM3H,OAAS4S,MAAQjL,MAAM3H,OAASuS,MAAQ,IAAM,EACvE,KAAM3C,MAAQ,GAAKC,OAAS,GAAMlF,QAAUnM,WAAatL,MAAQuL,KAAM,CACrEvL,IAAM0R,YAER,MAAO1R,KAGT,QAAS2O,YAAWlC,MAElB,IAAKA,OAASA,KAAKgI,MAA0C,CAC3D,MAAOjD,gBAGT,GAAIiD,OAAQhI,KAAKgI,KACjB,IAAIA,MAAM1jB,OAAQ,CAChB0jB,MAAM1jB,OAAS,KAEjB0b,KAAKgI,MAAQ,IACb,OAAOlJ,MAGT,QAAS8C,kBAAiB5B,KAAM0K,MAC9B,GAAI1C,MAGJ,KAAKhI,OAASA,KAAKgI,MAAO,CAAE,MAAOjD,gBACnCiD,MAAQhI,KAAKgI,KACb,KAAKA,MAAMa,KAAO,KAAO,EAAG,CAAE,MAAO9D,gBAGrCiD,MAAM0C,KAAOA,IACbA,MAAKkF,KAAO,KACZ,OAAO9Q,MAIT7a,QAAQmxB,aAAeA,YACvBnxB,SAAQoxB,cAAgBA,aACxBpxB,SAAQkxB,iBAAmBA,gBAC3BlxB,SAAQqxB,YAAcA,WACtBrxB,SAAQ0d,aAAeA,YACvB1d,SAAQga,QAAUA,OAClBha,SAAQie,WAAaA,UACrBje,SAAQ2d,iBAAmBA,gBAC3B3d;QAAQwyB,YAAc,uCAYnBrH,kBAAkB,GAAGC,YAAY,GAAG3a,UAAU,GAAGgiB,YAAY,GAAGC,aAAa,KAAKC,IAAI,SAASrxB,QAAQrB,OAAOD,SACjH,YAGA,IAAIiE,OAAQ3C,QAAQ,kBAEpB,IAAIsxB,SAAU,EACd,IAAIhD,aAAc,GAClB,IAAIC,cAAe,GAGnB,IAAInC,OAAQ,CACZ,IAAIC,MAAO,CACX,IAAIC,OAAQ,CAEZ,IAAIiF,QACF,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAG/D,IAAIC,OACF,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAG1D,IAAIC,QACF,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IACtD,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAClD,KAAM,MAAO,MAAO,MAAO,EAAG,EAGhC,IAAIC,OACF,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpC,GAAI,GAAI,GAAI,GAAI,GAAI,GAGtB/yB,QAAOD,QAAU,QAASytB,eAAcrmB,KAAMwpB,KAAMqC,WAAYC,MAAOhvB,MAAOivB,YAAatC,KAAMwB,MAE/F,GAAI9F,MAAO8F,KAAK9F,IAGhB,IAAI5Y,KAAM,CACV,IAAI+d,KAAM,CACV,IAAIvd,KAAM,EAAGZ,IAAM,CACnB,IAAIjL,MAAO,CACX,IAAI8qB,MAAO,CACX,IAAIC,MAAO,CACX,IAAIxB,MAAO,CACX,IAAIyB,MAAO,CACX,IAAIC,MAAO,CACX,IAAIC,KACJ,IAAIC,KACJ,IAAIC,IACJ,IAAIC,KACJ,IAAIhD,KACJ,IAAIiD,MAAO,IACX,IAAIC,YAAa,CAEjB,IAAI/R,IACJ,IAAIgS,OAAQ,GAAI7vB,OAAMyb,MAAMkT,QAAQ,EACpC,IAAImB,MAAO,GAAI9vB,OAAMyb,MAAMkT,QAAQ,EACnC,IAAIjI,OAAQ,IACZ,IAAIqJ,aAAc,CAElB,IAAIlC,WAAWC,QAASC,QAkCxB,KAAKre,IAAM,EAAGA,KAAOif,QAASjf,MAAO,CACnCmgB,MAAMngB,KAAO,EAEf,IAAK+d,IAAM,EAAGA,IAAMwB,MAAOxB,MAAO,CAChCoC,MAAMlD,KAAKqC,WAAavB,QAI1BppB,KAAOikB,IACP,KAAKhZ,IAAMqf,QAASrf,KAAO,EAAGA,MAAO,CACnC,GAAIugB,MAAMvgB,OAAS,EAAG,CAAE,OAE1B,GAAIjL,KAAOiL,IAAK,CACdjL,KAAOiL,IAET,GAAIA,MAAQ,EAAG,CAIbrP,MAAMivB,eAAkB,GAAK,GAAO,IAAM,GAAM,CAMhDjvB,OAAMivB,eAAkB,GAAK,GAAO,IAAM,GAAM,CAEhDd,MAAK9F,KAAO,CACZ,OAAO,GAET,IAAKpY,IAAM,EAAGA,IAAMZ,IAAKY,MAAO,CAC9B,GAAI2f,MAAM3f,OAAS,EAAG,CAAE,OAE1B,GAAI7L,KAAO6L,IAAK,CACd7L,KAAO6L,IAIT0d,KAAO,CACP,KAAKle,IAAM,EAAGA,KAAOif,QAASjf,MAAO,CACnCke,OAAS,CACTA,OAAQiC,MAAMngB,IACd,IAAIke,KAAO,EAAG,CACZ,OAAQ,GAGZ,GAAIA,KAAO,IAAMzqB,OAASsmB,OAASna,MAAQ,GAAI,CAC7C,OAAQ,EAIVwgB,KAAK,GAAK,CACV,KAAKpgB,IAAM,EAAGA,IAAMif,QAASjf,MAAO,CAClCogB,KAAKpgB,IAAM,GAAKogB,KAAKpgB,KAAOmgB,MAAMngB,KAIpC,IAAK+d,IAAM,EAAGA,IAAMwB,MAAOxB,MAAO,CAChC,GAAId,KAAKqC,WAAavB,OAAS,EAAG,CAChCb,KAAKkD,KAAKnD,KAAKqC,WAAavB,SAAWA,KAsC3C,GAAItqB,OAASsmB,MAAO,CAChBkG,KAAOjJ,MAAQkG,IACf/O,KAAM,OACH,IAAI1a,OAASumB,KAAM,CACtBiG,KAAOf,KACPgB,aAAc,GACdlJ,OAAQmI,IACRkB,cAAe,GACflS,KAAM,QACH,CACH8R,KAAOb,KACPpI,OAAQqI,IACRlR,MAAO,EAIXyR,KAAO,CACP7B,KAAM,CACN/d,KAAMQ,GACNwc,MAAOwC,WACPC,MAAO9qB,IACP+qB,MAAO,CACPK,MAAO,CACPJ,MAAO,GAAKhrB,IACZqrB,MAAOL,KAAO,CAGd,IAAKlsB,OAASumB,MAAQ2F,KAAO1D,aAC1BxoB,OAASwmB,OAAS0F,KAAOzD,aAAe,CACzC,MAAO,GAGT,GAAI5uB,GAAE,CAEN,QAAS,CACPA,GAEA6wB,WAAYne,IAAM0f,IAClB,IAAIxC,KAAKa,KAAO5P,IAAK,CACnBiQ,QAAU,CACVC,UAAWnB,KAAKa,SAEb,IAAIb,KAAKa,KAAO5P,IAAK,CACxBiQ,QAAUpH,MAAMqJ,YAAcnD,KAAKa,KACnCM,UAAW4B,KAAKC,WAAahD,KAAKa,UAE/B,CACHK,QAAU,GAAK,EACfC,UAAW,EAIbwB,KAAO,GAAM7f,IAAM0f,IACnBI,MAAO,GAAKL,IACZjf,KAAMsf,IACN,GAAG,CACDA,MAAQD,IACRtvB,OAAMysB,MAAQ4C,MAAQF,MAAQI,MAAS3B,WAAa,GAAOC,SAAW,GAAMC,SAAU,QAC/EyB,OAAS,EAGlBD,MAAO,GAAM7f,IAAM,CACnB,OAAO4f,KAAOC,KAAM,CAClBA,OAAS,EAEX,GAAIA,OAAS,EAAG,CACdD,MAAQC,KAAO,CACfD,OAAQC,SACH,CACLD,KAAO,EAIT7B,KACA,MAAMoC,MAAMngB,OAAS,EAAG,CACtB,GAAIA,MAAQJ,IAAK,CAAE,MACnBI,IAAMid,KAAKqC,WAAapC,KAAKa,MAI/B,GAAI/d,IAAMrL,OAASirB,KAAOI,QAAUD,IAAK,CAEvC,GAAIL,OAAS,EAAG,CACdA,KAAO/qB,KAITqoB,MAAQxc,GAGRif,MAAOzf,IAAM0f,IACbxB,MAAO,GAAKuB,IACZ,OAAOA,KAAOC,KAAO9f,IAAK,CACxBse,MAAQiC,MAAMV,KAAOC,KACrB,IAAIxB,MAAQ,EAAG,CAAE,MACjBuB,MACAvB,QAAS,EAIXyB,MAAQ,GAAKF,IACb,IAAKhsB,OAASumB,MAAQ2F,KAAO1D,aAC1BxoB,OAASwmB,OAAS0F,KAAOzD,aAAe,CACzC,MAAO,GAIT6D,IAAMH,KAAOI,IAIbzvB,OAAMwvB,KAAQprB,MAAQ,GAAO8qB,MAAQ,GAAOzC,KAAOwC,YAAc,GAOrE,GAAII,OAAS,EAAG,CAIdrvB,MAAMysB,KAAO4C,MAAU5f,IAAM0f,MAAS,GAAO,IAAM,GAAK,EAK1DhB,KAAK9F,KAAOjkB,IACZ,OAAO,MAGN6iB,kBAAkB,KAAK8I,IAAI,SAAS3yB,QAAQrB,OAAOD,SACtD,YAEAC,QAAOD,SACL2C,EAAQ,kBACRtB,EAAQ,aACR6yB,EAAQ,GACRC,KAAQ,aACRC,KAAQ,eACRC,KAAQ,aACRC,KAAQ,sBACRC,KAAQ,eACRC,KAAQ,6BAEJC,IAAI,SAASnzB,QAAQrB,OAAOD,SAClC,YAGA,IAAIiE,OAAQ3C,QAAQ,kBASpB,IAAIigB,SAAwB,CAI5B,IAAIC,UAAwB,CAC5B,IAAIC,QAAwB,CAE5B,IAAIC,WAAwB,CAK5B,SAASmC,MAAK7Q,KAAO,GAAIW,KAAMX,IAAI5R,MAAQ,SAASuS,KAAO,EAAG,CAAEX,IAAIW,KAAO,GAI3E,GAAI+gB,cAAe,CACnB,IAAIC,cAAe,CACnB,IAAIC,WAAe,CAGnB,IAAIjS,WAAe,CACnB,IAAIC,WAAe,GAQnB,IAAIR,cAAgB,EAGpB,IAAIC,UAAgB,GAGpB,IAAIC,SAAgBD,SAAW,EAAID,YAGnC,IAAIG,SAAgB,EAGpB,IAAIC,UAAgB,EAGpB,IAAIC,WAAgB,EAAEH,QAAU,CAGhC,IAAII,UAAgB,EAGpB,IAAImS,UAAgB,EAQpB,IAAIC,aAAc,CAGlB,IAAIC,WAAc,GAGlB,IAAIC,SAAc,EAGlB,IAAIC,WAAc,EAGlB,IAAIC,aAAc,EAGlB,IAAIC,cACD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAE3D,IAAIC,cACD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAEpE,IAAIC,eACD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAEvC,IAAIC,WACD,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAW/C,IAAIC,eAAgB,GAGpB,IAAIC,cAAgB,GAAI1iB,QAAOwP,QAAQ,GAAK,EAC5CuB,MAAK2R,aAOL,IAAIC,cAAgB,GAAI3iB,OAAMyP,QAAU,EACxCsB,MAAK4R,aAKL,IAAIC,YAAgB,GAAI5iB,OAAMyiB,cAC9B1R,MAAK6R,WAML,IAAIC,cAAgB,GAAI7iB,OAAM8P,UAAUD,UAAU,EAClDkB,MAAK8R,aAGL,IAAIC,aAAgB,GAAI9iB,OAAMsP,aAC9ByB,MAAK+R,YAGL,IAAIC,WAAgB,GAAI/iB,OAAMyP,QAC9BsB,MAAKgS,UAIL,IAAIC,gBAAiB,SAAUC,YAAaC,WAAYC,WAAYC,MAAOC,YAEzEtzB,KAAKkzB,YAAeA,WACpBlzB,MAAKmzB,WAAeA,UACpBnzB,MAAKozB,WAAeA,UACpBpzB,MAAKqzB,MAAeA,KACpBrzB,MAAKszB,WAAeA,UAGpBtzB,MAAKuzB,UAAeL,aAAeA,YAAY30B,OAIjD,IAAIi1B,cACJ,IAAIC,cACJ,IAAIC,eAGJ,IAAIC,UAAW,SAASC,SAAUC,WAChC7zB,KAAK4zB,SAAWA,QAChB5zB,MAAK8zB,SAAW,CAChB9zB,MAAK6zB,UAAYA,UAKnB,SAASE,QAAO9J,MACd,MAAOA,MAAO,IAAM4I,WAAW5I,MAAQ4I,WAAW,KAAO5I,OAAS,IAQpE,QAAS+J,WAAWj2B,EAAGk2B,GAGrBl2B,EAAEqjB,YAAYrjB,EAAEojB,WAAa,EAAM,GACnCpjB,GAAEqjB,YAAYrjB,EAAEojB,WAAc8S,IAAM,EAAK,IAQ3C,QAASC,WAAUn2B,EAAGoW,MAAO5V,QAC3B,GAAIR,EAAEopB,SAAY6K,SAAWzzB,OAAS,CACpCR,EAAEmpB,QAAW/S,OAASpW,EAAEopB,SAAY,KACpC6M,WAAUj2B,EAAGA,EAAEmpB,OACfnpB,GAAEmpB,OAAS/S,OAAU6d,SAAWj0B,EAAEopB,QAClCppB,GAAEopB,UAAY5oB,OAASyzB,aAClB,CACLj0B,EAAEmpB,QAAW/S,OAASpW,EAAEopB,SAAY,KACpCppB,GAAEopB,UAAY5oB,QAKlB,QAAS41B,WAAUp2B,EAAGqS,EAAGgkB,MACvBF,UAAUn2B,EAAGq2B,KAAKhkB,EAAE,GAAagkB,KAAKhkB,EAAE,EAAI,IAS9C,QAASikB,YAAW7hB,KAAM1B,KACxB,GAAIyB,KAAM,CACV,GAAG,CACDA,KAAOC,KAAO,CACdA,SAAU,CACVD,OAAQ,UACCzB,IAAM,EACjB,OAAOyB,OAAQ,EAOjB,QAAS+hB,UAASv2B,GAChB,GAAIA,EAAEopB,WAAa,GAAI,CACrB6M,UAAUj2B,EAAGA,EAAEmpB,OACfnpB,GAAEmpB,OAAS,CACXnpB,GAAEopB,SAAW,MAER,IAAIppB,EAAEopB,UAAY,EAAG,CAC1BppB,EAAEqjB,YAAYrjB,EAAEojB,WAAapjB,EAAEmpB,OAAS,GACxCnpB,GAAEmpB,SAAW,CACbnpB,GAAEopB,UAAY,GAelB,QAASoN,YAAWx2B,EAAGy2B,MAIrB,GAAIJ,MAAkBI,KAAKZ,QAC3B,IAAIE,UAAkBU,KAAKV,QAC3B,IAAIW,OAAkBD,KAAKX,UAAUX,WACrC,IAAIK,WAAkBiB,KAAKX,UAAUN,SACrC,IAAIzL,OAAkB0M,KAAKX,UAAUV,UACrC,IAAIpC,MAAkByD,KAAKX,UAAUT,UACrC,IAAIE,YAAkBkB,KAAKX,UAAUP,UACrC,IAAIoB,EACJ,IAAI72B,GAAG2lB,CACP,IAAIkG,KACJ,IAAIiL,MACJ,IAAIp3B,EACJ,IAAIq3B,UAAW,CAEf,KAAKlL,KAAO,EAAGA,MAAQ7J,SAAU6J,OAAQ,CACvC3rB,EAAEwoB,SAASmD,MAAQ,EAMrB0K,KAAKr2B,EAAEyoB,KAAKzoB,EAAE2oB,UAAU,EAAI,GAAa,CAEzC,KAAKgO,EAAI32B,EAAE2oB,SAAS,EAAGgO,EAAI9U,UAAW8U,IAAK,CACzC72B,EAAIE,EAAEyoB,KAAKkO,EACXhL,MAAO0K,KAAKA,KAAKv2B,EAAE,EAAG,GAAa,EAAI,GAAa,CACpD,IAAI6rB,KAAO4J,WAAY,CACrB5J,KAAO4J,UACPsB,YAEFR,KAAKv2B,EAAE,EAAI,GAAa6rB,IAGxB,IAAI7rB,EAAIi2B,SAAU,CAAE,SAEpB/1B,EAAEwoB,SAASmD,OACXiL,OAAQ,CACR,IAAI92B,GAAKkzB,KAAM,CACb4D,MAAQ7M,MAAMjqB,EAAEkzB,MAElBxzB,EAAI62B,KAAKv2B,EAAI,EACbE,GAAEgpB,SAAWxpB,GAAKmsB,KAAOiL,MACzB,IAAIpB,UAAW,CACbx1B,EAAEipB,YAAczpB,GAAKk3B,MAAM52B,EAAE,EAAI,GAAa82B,QAGlD,GAAIC,WAAa,EAAG,CAAE,OAMtB,EAAG,CACDlL,KAAO4J,WAAW,CAClB,OAAOv1B,EAAEwoB,SAASmD,QAAU,EAAG,CAAEA,OACjC3rB,EAAEwoB,SAASmD,OACX3rB,GAAEwoB,SAASmD,KAAK,IAAM,CACtB3rB,GAAEwoB,SAAS+M,aAIXsB,WAAY,QACLA,SAAW,EAOpB,KAAKlL,KAAO4J,WAAY5J,OAAS,EAAGA,OAAQ,CAC1C7rB,EAAIE,EAAEwoB,SAASmD,KACf,OAAO7rB,IAAM,EAAG,CACd2lB,EAAIzlB,EAAEyoB,OAAOkO,EACb,IAAIlR,EAAIsQ,SAAU,CAAE,SACpB,GAAIM,KAAK5Q,EAAE,EAAI,KAAekG,KAAM,CAElC3rB,EAAEgpB,UAAY2C,KAAO0K,KAAK5Q,EAAE,EAAI,IAAY4Q,KAAK5Q,EAAE,EACnD4Q,MAAK5Q,EAAE,EAAI,GAAakG,KAE1B7rB,MAcN,QAASg3B,WAAUT,KAAMN,SAAUvN,UAKjC,GAAIuO,WAAY,GAAI7kB,OAAM4P,SAAS,EACnC,IAAIrN,MAAO,CACX,IAAIkX,KACJ,IAAI7rB,EAKJ,KAAK6rB,KAAO,EAAGA,MAAQ7J,SAAU6J,OAAQ,CACvCoL,UAAUpL,MAAQlX,KAAQA,KAAO+T,SAASmD,KAAK,IAAO,EASxD,IAAK7rB,EAAI,EAAIA,GAAKi2B,SAAUj2B,IAAK,CAC/B,GAAIiT,KAAMsjB,KAAKv2B,EAAE,EAAI,EACrB,IAAIiT,MAAQ,EAAG,CAAE,SAEjBsjB,KAAKv2B,EAAE,GAAcw2B,WAAWS,UAAUhkB,OAAQA,MAWtD,QAASikB,kBACP,GAAIl3B,EACJ,IAAI6rB,KACJ,IAAInrB,OACJ,IAAIiU,KACJ,IAAIyX,KACJ,IAAI1D,UAAW,GAAItW,OAAM4P,SAAS,EAgBlCthB,QAAS,CACT,KAAKiU,KAAO,EAAGA,KAAO+M,aAAa,EAAG/M,OAAQ,CAC5CugB,YAAYvgB,MAAQjU,MACpB,KAAKV,EAAI,EAAGA,EAAK,GAAGy0B,YAAY9f,MAAQ3U,IAAK,CAC3Ci1B,aAAav0B,UAAYiU,MAQ7BsgB,aAAav0B,OAAO,GAAKiU,IAGzByX,MAAO,CACP,KAAKzX,KAAO,EAAIA,KAAO,GAAIA,OAAQ,CACjCwgB,UAAUxgB,MAAQyX,IAClB,KAAKpsB,EAAI,EAAGA,EAAK,GAAG00B,YAAY/f,MAAQ3U,IAAK,CAC3Cg1B,WAAW5I,QAAUzX,MAIzByX,OAAS,CACT,MAAQzX,KAAOkN,QAASlN,OAAQ,CAC9BwgB,UAAUxgB,MAAQyX,MAAQ,CAC1B,KAAKpsB,EAAI,EAAGA,EAAK,GAAI00B,YAAY/f,MAAM,EAAK3U,IAAK,CAC/Cg1B,WAAW,IAAM5I,QAAUzX,MAM/B,IAAKkX,KAAO,EAAGA,MAAQ7J,SAAU6J,OAAQ,CACvCnD,SAASmD,MAAQ,EAGnB7rB,EAAI,CACJ,OAAOA,GAAK,IAAK,CACf80B,aAAa90B,EAAE,EAAI,GAAa,CAChCA,IACA0oB,UAAS,KAEX,MAAO1oB,GAAK,IAAK,CACf80B,aAAa90B,EAAE,EAAI,GAAa,CAChCA,IACA0oB,UAAS,KAEX,MAAO1oB,GAAK,IAAK,CACf80B,aAAa90B,EAAE,EAAI,GAAa,CAChCA,IACA0oB,UAAS,KAEX,MAAO1oB,GAAK,IAAK,CACf80B,aAAa90B,EAAE,EAAI,GAAa,CAChCA,IACA0oB,UAAS,KAMXsO,UAAUlC,aAAclT,QAAQ,EAAG8G,SAGnC,KAAK1oB,EAAI,EAAGA,EAAI6hB,QAAS7hB,IAAK,CAC5B+0B,aAAa/0B,EAAE,EAAI,GAAa,CAChC+0B,cAAa/0B,EAAE,GAAcw2B,WAAWx2B,EAAG,GAI7C21B,cAAgB,GAAIP,gBAAeN,aAAcL,YAAa9S,SAAS,EAAGC,QAASI,SACnF4T,eAAgB,GAAIR,gBAAeL,aAAcL,YAAa,EAAY7S,QAASG,SACnF6T,gBAAgB,GAAIT,gBAAe,GAAIhjB,OAAM,GAAIuiB,aAAc,EAAW7S,SAAUsS,aAStF,QAAS+C,YAAWj3B,GAClB,GAAIF,EAGJ,KAAKA,EAAI,EAAGA,EAAI4hB,QAAU5hB,IAAK,CAAEE,EAAEkoB,UAAUpoB,EAAE,GAAc,EAC7D,IAAKA,EAAI,EAAGA,EAAI6hB,QAAU7hB,IAAK,CAAEE,EAAEmoB,UAAUroB,EAAE,GAAc,EAC7D,IAAKA,EAAI,EAAGA,EAAI8hB,SAAU9hB,IAAK,CAAEE,EAAEooB,QAAQtoB,EAAE,GAAc,EAE3DE,EAAEkoB,UAAUiM,UAAU,GAAc,CACpCn0B,GAAEgpB,QAAUhpB,EAAEipB,WAAa,CAC3BjpB,GAAE6mB,SAAW7mB,EAAEkpB,QAAU,EAO3B,QAASgO,WAAUl3B,GAEjB,GAAIA,EAAEopB,SAAW,EAAG,CAClB6M,UAAUj2B,EAAGA,EAAEmpB,YACV,IAAInpB,EAAEopB,SAAW,EAAG,CAEzBppB,EAAEqjB,YAAYrjB,EAAEojB,WAAapjB,EAAEmpB,OAEjCnpB,EAAEmpB,OAAS,CACXnpB,GAAEopB,SAAW,EAOf,QAAS+N,YAAWn3B,EAAGoS,IAAKW,IAAKrF,QAM/BwpB,UAAUl3B,EAEV,IAAI0N,OAAQ,CACVuoB,UAAUj2B,EAAG+S,IACbkjB,WAAUj2B,GAAI+S,KAKhB1P,MAAM+Z,SAASpd,EAAEqjB,YAAarjB,EAAEP,OAAQ2S,IAAKW,IAAK/S,EAAEojB,QACpDpjB,GAAEojB,SAAWrQ,IAOf,QAASqkB,SAAQf,KAAMv2B,EAAG2lB,EAAGmD,OAC3B,GAAIyO,KAAMv3B,EAAE,CACZ,IAAIw3B,KAAM7R,EAAE,CACZ,OAAQ4Q,MAAKgB,KAAgBhB,KAAKiB,MAC1BjB,KAAKgB,OAAkBhB,KAAKiB,MAAiB1O,MAAM9oB,IAAM8oB,MAAMnD,GASzE,QAAS8R,YAAWv3B,EAAGq2B,KAAMljB,GAK3B,GAAIqkB,GAAIx3B,EAAEyoB,KAAKtV,EACf,IAAIskB,GAAItkB,GAAK,CACb,OAAOskB,GAAKz3B,EAAE0oB,SAAU,CAEtB,GAAI+O,EAAIz3B,EAAE0oB,UACR0O,QAAQf,KAAMr2B,EAAEyoB,KAAKgP,EAAE,GAAIz3B,EAAEyoB,KAAKgP,GAAIz3B,EAAE4oB,OAAQ,CAChD6O,IAGF,GAAIL,QAAQf,KAAMmB,EAAGx3B,EAAEyoB,KAAKgP,GAAIz3B,EAAE4oB,OAAQ,CAAE,MAG5C5oB,EAAEyoB,KAAKtV,GAAKnT,EAAEyoB,KAAKgP,EACnBtkB,GAAIskB,CAGJA,KAAM,EAERz3B,EAAEyoB,KAAKtV,GAAKqkB,EAUd,QAASE,gBAAe13B,EAAG23B,MAAOC,OAKhC,GAAI1L,KACJ,IAAI2L,GACJ,IAAIC,IAAK,CACT,IAAIrjB,KACJ,IAAIsV,MAEJ,IAAI/pB,EAAE6mB,WAAa,EAAG,CACpB,EAAG,CACDqF,KAAQlsB,EAAEqjB,YAAYrjB,EAAE+oB,MAAQ+O,GAAG,IAAM,EAAM93B,EAAEqjB,YAAYrjB,EAAE+oB,MAAQ+O,GAAG,EAAI,EAC9ED,IAAK73B,EAAEqjB,YAAYrjB,EAAE6oB,MAAQiP,GAC7BA,KAEA,IAAI5L,OAAS,EAAG,CACdkK,UAAUp2B,EAAG63B,GAAIF,WAEZ,CAELljB,KAAOsgB,aAAa8C,GACpBzB,WAAUp2B,EAAGyU,KAAKgN,SAAS,EAAGkW,MAC9B5N,OAAQwK,YAAY9f,KACpB,IAAIsV,QAAU,EAAG,CACf8N,IAAM7C,YAAYvgB,KAClB0hB,WAAUn2B,EAAG63B,GAAI9N,OAEnBmC,MACAzX,MAAOuhB,OAAO9J,KAGdkK,WAAUp2B,EAAGyU,KAAMmjB,MACnB7N,OAAQyK,YAAY/f,KACpB,IAAIsV,QAAU,EAAG,CACfmC,MAAQ+I,UAAUxgB,KAClB0hB,WAAUn2B,EAAGksB,KAAMnC,eAQhB+N,GAAK93B,EAAE6mB,UAGlBuP,UAAUp2B,EAAGm0B,UAAWwD,OAY1B,QAASI,YAAW/3B,EAAGy2B,MAIrB,GAAIJ,MAAWI,KAAKZ,QACpB,IAAIa,OAAWD,KAAKX,UAAUX,WAC9B,IAAIK,WAAYiB,KAAKX,UAAUN,SAC/B,IAAIF,OAAWmB,KAAKX,UAAUR,KAC9B,IAAIx1B,GAAG2lB,CACP,IAAIsQ,WAAY,CAChB,IAAIiC,KAMJh4B,GAAE0oB,SAAW,CACb1oB,GAAE2oB,SAAW9G,SAEb,KAAK/hB,EAAI,EAAGA,EAAIw1B,MAAOx1B,IAAK,CAC1B,GAAIu2B,KAAKv2B,EAAI,KAAgB,EAAG,CAC9BE,EAAEyoB,OAAOzoB,EAAE0oB,UAAYqN,SAAWj2B,CAClCE,GAAE4oB,MAAM9oB,GAAK,MAER,CACLu2B,KAAKv2B,EAAE,EAAI,GAAa,GAS5B,MAAOE,EAAE0oB,SAAW,EAAG,CACrBsP,KAAOh4B,EAAEyoB,OAAOzoB,EAAE0oB,UAAaqN,SAAW,IAAMA,SAAW,CAC3DM,MAAK2B,KAAO,GAAc,CAC1Bh4B,GAAE4oB,MAAMoP,MAAQ,CAChBh4B,GAAEgpB,SAEF,IAAIwM,UAAW,CACbx1B,EAAEipB,YAAcyN,MAAMsB,KAAK,EAAI,IAInCvB,KAAKV,SAAWA,QAKhB,KAAKj2B,EAAKE,EAAE0oB,UAAY,EAAc5oB,GAAK,EAAGA,IAAK,CAAEy3B,WAAWv3B,EAAGq2B,KAAMv2B,GAKzEk4B,KAAO1C,KACP,GAAG,CAGDx1B,EAAIE,EAAEyoB,KAAK,EACXzoB,GAAEyoB,KAAK,GAAiBzoB,EAAEyoB,KAAKzoB,EAAE0oB,WACjC6O,YAAWv3B,EAAGq2B,KAAM,EAGpB5Q,GAAIzlB,EAAEyoB,KAAK,EAEXzoB,GAAEyoB,OAAOzoB,EAAE2oB,UAAY7oB,CACvBE,GAAEyoB,OAAOzoB,EAAE2oB,UAAYlD,CAGvB4Q,MAAK2B,KAAO,GAAc3B,KAAKv2B,EAAI,GAAcu2B,KAAK5Q,EAAI,EAC1DzlB,GAAE4oB,MAAMoP,OAASh4B,EAAE4oB,MAAM9oB,IAAME,EAAE4oB,MAAMnD,GAAKzlB,EAAE4oB,MAAM9oB,GAAKE,EAAE4oB,MAAMnD,IAAM,CACvE4Q,MAAKv2B,EAAE,EAAI,GAAau2B,KAAK5Q,EAAE,EAAI,GAAauS,IAGhDh4B,GAAEyoB,KAAK,GAAiBuP,MACxBT,YAAWv3B,EAAGq2B,KAAM,SAEbr2B,EAAE0oB,UAAY,EAEvB1oB,GAAEyoB,OAAOzoB,EAAE2oB,UAAY3oB,EAAEyoB,KAAK,EAK9B+N,YAAWx2B,EAAGy2B,KAGdK,WAAUT,KAAMN,SAAU/1B,EAAEwoB,UAQ9B,QAASyP,WAAUj4B,EAAGq2B,KAAMN,UAK1B,GAAIj2B,EACJ,IAAIo4B,UAAW,CACf,IAAIC,OAEJ,IAAIC,SAAU/B,KAAK,EAAE,EAAI,EAEzB,IAAInD,OAAQ,CACZ,IAAImF,WAAY,CAChB,IAAIC,WAAY,CAEhB,IAAIF,UAAY,EAAG,CACjBC,UAAY,GACZC,WAAY,EAEdjC,MAAMN,SAAS,GAAG,EAAI,GAAa,KAEnC,KAAKj2B,EAAI,EAAGA,GAAKi2B,SAAUj2B,IAAK,CAC9Bq4B,OAASC,OACTA,SAAU/B,MAAMv2B,EAAE,GAAG,EAAI,EAEzB,MAAMozB,MAAQmF,WAAaF,SAAWC,QAAS,CAC7C,aAEK,IAAIlF,MAAQoF,UAAW,CAC5Bt4B,EAAEooB,QAAQ+P,OAAS,IAAejF,UAE7B,IAAIiF,SAAW,EAAG,CAEvB,GAAIA,SAAWD,QAAS,CAAEl4B,EAAEooB,QAAQ+P,OAAS,KAC7Cn4B,EAAEooB,QAAQgM,QAAQ,SAEb,IAAIlB,OAAS,GAAI,CACtBlzB,EAAEooB,QAAQiM,UAAU,SAEf,CACLr0B,EAAEooB,QAAQkM,YAAY,KAGxBpB,MAAQ,CACRgF,SAAUC,MAEV,IAAIC,UAAY,EAAG,CACjBC,UAAY,GACZC,WAAY,MAEP,IAAIH,SAAWC,QAAS,CAC7BC,UAAY,CACZC,WAAY,MAEP,CACLD,UAAY,CACZC,WAAY,IAUlB,QAASC,WAAUv4B,EAAGq2B,KAAMN,UAK1B,GAAIj2B,EACJ,IAAIo4B,UAAW,CACf,IAAIC,OAEJ,IAAIC,SAAU/B,KAAK,EAAE,EAAI,EAEzB,IAAInD,OAAQ,CACZ,IAAImF,WAAY,CAChB,IAAIC,WAAY,CAGhB,IAAIF,UAAY,EAAG,CACjBC,UAAY,GACZC,WAAY,EAGd,IAAKx4B,EAAI,EAAGA,GAAKi2B,SAAUj2B,IAAK,CAC9Bq4B,OAASC,OACTA,SAAU/B,MAAMv2B,EAAE,GAAG,EAAI,EAEzB,MAAMozB,MAAQmF,WAAaF,SAAWC,QAAS,CAC7C,aAEK,IAAIlF,MAAQoF,UAAW,CAC5B,EAAG,CAAElC,UAAUp2B,EAAGm4B,OAAQn4B,EAAEooB,iBAAqB8K,QAAU,OAEtD,IAAIiF,SAAW,EAAG,CACvB,GAAIA,SAAWD,QAAS,CACtB9B,UAAUp2B,EAAGm4B,OAAQn4B,EAAEooB,QACvB8K,SAGFkD,UAAUp2B,EAAGo0B,QAASp0B,EAAEooB,QACxB+N,WAAUn2B,EAAGkzB,MAAM,EAAG,OAEjB,IAAIA,OAAS,GAAI,CACtBkD,UAAUp2B,EAAGq0B,UAAWr0B,EAAEooB,QAC1B+N,WAAUn2B,EAAGkzB,MAAM,EAAG,OAEjB,CACLkD,UAAUp2B,EAAGs0B,YAAat0B,EAAEooB,QAC5B+N,WAAUn2B,EAAGkzB,MAAM,GAAI,GAGzBA,MAAQ,CACRgF,SAAUC,MACV,IAAIC,UAAY,EAAG,CACjBC,UAAY,GACZC,WAAY,MAEP,IAAIH,SAAWC,QAAS,CAC7BC,UAAY,CACZC,WAAY,MAEP,CACLD,UAAY,CACZC,WAAY,IAUlB,QAASE,eAAcx4B,GACrB,GAAIy4B,YAGJR,WAAUj4B,EAAGA,EAAEkoB,UAAWloB,EAAEqoB,OAAO0N,SACnCkC,WAAUj4B,EAAGA,EAAEmoB,UAAWnoB,EAAEsoB,OAAOyN,SAGnCgC,YAAW/3B,EAAGA,EAAEuoB,QAShB,KAAKkQ,YAAc7W,SAAS,EAAG6W,aAAe,EAAGA,cAAe,CAC9D,GAAIz4B,EAAEooB,QAAQsM,SAAS+D,aAAa,EAAI,KAAe,EAAG,CACxD,OAIJz4B,EAAEgpB,SAAW,GAAGyP,YAAY,GAAK,EAAE,EAAE,CAIrC,OAAOA,aAST,QAASC,gBAAe14B,EAAG24B,OAAQC,OAAQC,SAIzC,GAAI7V,KAMJmT,WAAUn2B,EAAG24B,OAAO,IAAK,EACzBxC,WAAUn2B,EAAG44B,OAAO,EAAK,EACzBzC,WAAUn2B,EAAG64B,QAAQ,EAAI,EACzB,KAAK7V,KAAO,EAAGA,KAAO6V,QAAS7V,OAAQ,CAErCmT,UAAUn2B,EAAGA,EAAEooB,QAAQsM,SAAS1R,MAAM,EAAI,GAAY,GAIxDuV,UAAUv4B,EAAGA,EAAEkoB,UAAWyQ,OAAO,EAGjCJ,WAAUv4B,EAAGA,EAAEmoB,UAAWyQ,OAAO,GAkBnC,QAASE,kBAAiB94B,GAKxB,GAAI+4B,YAAa,UACjB,IAAIj5B,EAGJ,KAAKA,EAAI,EAAGA,GAAK,GAAIA,IAAKi5B,cAAgB,EAAG,CAC3C,GAAKA,WAAa,GAAO/4B,EAAEkoB,UAAUpoB,EAAE,KAAgB,EAAI,CACzD,MAAO8gB,WAKX,GAAI5gB,EAAEkoB,UAAU,EAAI,KAAgB,GAAKloB,EAAEkoB,UAAU,GAAK,KAAgB,GACtEloB,EAAEkoB,UAAU,GAAK,KAAgB,EAAG,CACtC,MAAOrH,QAET,IAAK/gB,EAAI,GAAIA,EAAI2hB,SAAU3hB,IAAK,CAC9B,GAAIE,EAAEkoB,UAAUpoB,EAAI,KAAgB,EAAG,CACrC,MAAO+gB,SAOX,MAAOD,UAIT,GAAIoY,kBAAmB,KAKvB,SAASzP,UAASvpB,GAGhB,IAAKg5B,iBAAkB,CACrBhC,gBACAgC,kBAAmB,KAGrBh5B,EAAEqoB,OAAU,GAAIuN,UAAS51B,EAAEkoB,UAAWuN,cACtCz1B,GAAEsoB,OAAU,GAAIsN,UAAS51B,EAAEmoB,UAAWuN,cACtC11B,GAAEuoB,QAAU,GAAIqN,UAAS51B,EAAEooB,QAASuN,eAEpC31B,GAAEmpB,OAAS,CACXnpB,GAAEopB,SAAW,CAGb6N,YAAWj3B,GAOb,QAASqqB,kBAAiBrqB,EAAGoS,IAAK6mB,WAAYxV,MAM5C0S,UAAUn2B,GAAI8zB,cAAc,IAAIrQ,KAAO,EAAI,GAAI,EAC/C0T,YAAWn3B,EAAGoS,IAAK6mB,WAAY,MAQjC,QAAS7O,WAAUpqB,GACjBm2B,UAAUn2B,EAAG+zB,cAAc,EAAG,EAC9BqC,WAAUp2B,EAAGm0B,UAAWS,aACxB2B,UAASv2B,GAQX,QAAS0jB,iBAAgB1jB,EAAGoS,IAAK6mB,WAAYxV,MAM3C,GAAIyV,UAAUC,WACd,IAAIV,aAAc,CAGlB,IAAIz4B,EAAEua,MAAQ,EAAG,CAGf,GAAIva,EAAEmb,KAAKmO,YAAcxI,UAAW,CAClC9gB,EAAEmb,KAAKmO,UAAYwP,iBAAiB94B,GAItC+3B,WAAW/3B,EAAGA,EAAEqoB,OAIhB0P,YAAW/3B,EAAGA,EAAEsoB,OAUhBmQ,aAAcD,cAAcx4B,EAG5Bk5B,UAAYl5B,EAAEgpB,QAAQ,EAAE,IAAO,CAC/BmQ,aAAen5B,EAAEipB,WAAW,EAAE,IAAO,CAMrC,IAAIkQ,aAAeD,SAAU,CAAEA,SAAWC,iBAErC,CAELD,SAAWC,YAAcF,WAAa,EAGxC,GAAKA,WAAW,GAAKC,UAAc9mB,OAAS,EAAI,CAS9CiY,iBAAiBrqB,EAAGoS,IAAK6mB,WAAYxV,UAEhC,IAAIzjB,EAAE2a,WAAagG,SAAWwY,cAAgBD,SAAU,CAE7D/C,UAAUn2B,GAAI+zB,cAAc,IAAMtQ,KAAO,EAAI,GAAI,EACjDiU,gBAAe13B,EAAG40B,aAAcC,kBAE3B,CACLsB,UAAUn2B,GAAIg0B,WAAW,IAAMvQ,KAAO,EAAI,GAAI,EAC9CiV,gBAAe14B,EAAGA,EAAEqoB,OAAO0N,SAAS,EAAG/1B,EAAEsoB,OAAOyN,SAAS,EAAG0C,YAAY,EACxEf,gBAAe13B,EAAGA,EAAEkoB,UAAWloB,EAAEmoB,WAMnC8O,WAAWj3B,EAEX,IAAIyjB,KAAM,CACRyT,UAAUl3B,IAUd,QAAS2mB,WAAU3mB,EAAGksB,KAAM2L,IAO1B73B,EAAEqjB,YAAYrjB,EAAE+oB,MAAQ/oB,EAAE6mB,SAAW,GAAUqF,OAAS,EAAK,GAC7DlsB,GAAEqjB,YAAYrjB,EAAE+oB,MAAQ/oB,EAAE6mB,SAAW,EAAI,GAAKqF,KAAO,GAErDlsB,GAAEqjB,YAAYrjB,EAAE6oB,MAAQ7oB,EAAE6mB,UAAYgR,GAAK,GAC3C73B,GAAE6mB,UAEF,IAAIqF,OAAS,EAAG,CAEdlsB,EAAEkoB,UAAU2P,GAAG,SACV,CACL73B,EAAEkpB,SAEFgD,OAKAlsB,GAAEkoB,WAAW6M,aAAa8C,IAAIpW,SAAS,GAAK,IAC5CzhB,GAAEmoB,UAAU6N,OAAO9J,MAAQ,KA0B7B,MAAQlsB,GAAE6mB,WAAa7mB,EAAE8oB,YAAY,EAOvC1pB,QAAQmqB,SAAYA,QACpBnqB,SAAQirB,iBAAmBA,gBAC3BjrB,SAAQskB,gBAAmBA,eAC3BtkB,SAAQunB,UAAYA,SACpBvnB,SAAQgrB,UAAYA,YACjBG,kBAAkB,KAAK6O,IAAI,SAAS14B,QAAQrB,OAAOD,SACtD,YAGA,SAASi6B,WAEPp3B,KAAKpB,MAAQ,IACboB,MAAKyZ,QAAU,CAEfzZ,MAAK0Z,SAAW,CAEhB1Z,MAAKgiB,SAAW,CAEhBhiB,MAAKlB,OAAS,IACdkB,MAAK4Z,SAAW,CAEhB5Z,MAAKmZ,UAAY,CAEjBnZ,MAAKshB,UAAY,CAEjBthB,MAAK4X,IAAM,EAEX5X,MAAKkhB,MAAQ,IAEblhB,MAAKqnB,UAAY,CAEjBrnB,MAAKsd,MAAQ,EAGflgB,OAAOD,QAAUi6B,kBACN,IACV,ICjxRD,IAAIC,UACJ,SAAUA,MACVA,KAAKC,QAAU,QACf,IAAIC,kBAAmB,KAAMC,eAC7B,UAAUp6B,UAAW,mBAAsBe,WAAY,YAAa,CACnE,SAAUs5B,WAAY,YAAaA,QAAUt5B,QAAQ,iBACrDq5B,iBAAkBC,QAAQF,kBAE3B,QAASG,YAAaC,OAAO,MAC7B,GAAIA,QAAS,SAASC,IAAML,iBAAmBK,GAE/C,SAASC,YAAW71B,MAAQ,GAAIhE,KAAQ,KAAI,GAAII,GAAI,EAAG0S,IAAM9O,KAAKzD,OAAQH,EAAI0S,MAAO1S,EAAGJ,EAAEI,GAAK4D,KAAK1C,WAAWlB,EAAI,OAAOJ,GAC1H,GAAI85B,WAAY,SAAS91B,MAAQ,MAAOA,MAExC,UAAUy1B,WAAY,YAAa,CAClCE,OAAS,SAASC,IAAML,iBAAmBK,EAAIJ,iBAAkBC,QAAQG,IACzEE,WAAY,SAAS91B,MACpB,GAAGA,KAAK1C,WAAW,KAAO,KAAQ0C,KAAK1C,WAAW,KAAO,IAAM,CAAE,MAAOm4B,SAAQr2B,MAAM3B,OAAO,KAAMo4B,WAAW71B,KAAK+1B,OAAO,KAC1H,MAAO/1B,OAKT,GAAIg2B,OACJ,IAAIC,UAAW,QAASA,UAASD,KACjCA,IAAIV,QAAU,OACd,SAASY,SAAQz2B,GAAK,GAAIzD,GAAI,GAAII,EAAIqD,EAAElD,OAAO,CAAG,OAAMH,GAAG,EAAGJ,GAAKyD,EAAEjC,OAAOpB,IAAM,OAAOJ,GACzF,QAAS4yB,MAAKxgB,EAAEoM,GAAK,GAAIxe,GAAI,EAAI,OAAMA,EAAEO,OAASie,EAAGxe,GAAGoS,CAAG,OAAOpS,GAClE,QAASm6B,MAAK5C,EAAE6C,GAAG,GAAIx6B,GAAE,GAAG23B,CAAG,OAAO33B,GAAEW,QAAQ65B,EAAEx6B,EAAEgzB,KAAK,IAAIwH,EAAEx6B,EAAEW,QAAQX,EACzE,QAASy6B,MAAK9C,EAAE6C,GAAG,GAAIx6B,GAAE,GAAG23B,CAAE,OAAO33B,GAAEW,QAAQ65B,EAAEx6B,EAAEgzB,KAAK,IAAIwH,EAAEx6B,EAAEW,QAAQX,EACxE,QAAS06B,OAAM/C,EAAE6C,GAAG,GAAIx6B,GAAE,GAAG23B,CAAG,OAAO33B,GAAEW,QAAQ65B,EAAEx6B,EAAEA,EAAEgzB,KAAK,IAAIwH,EAAEx6B,EAAEW,QACpE,QAASg6B,QAAOhD,EAAE6C,GAAG,GAAIx6B,GAAE,GAAGyT,KAAKmnB,MAAMjD,EAAI,OAAO33B,GAAEW,QAAQ65B,EAAEx6B,EAAEgzB,KAAK,IAAIwH,EAAEx6B,EAAEW,QAAQX,EACvF,QAAS66B,QAAOlD,EAAE6C,GAAG,GAAIx6B,GAAE,GAAG23B,CAAG,OAAO33B,GAAEW,QAAQ65B,EAAEx6B,EAAEgzB,KAAK,IAAIwH,EAAEx6B,EAAEW,QAAQX,EAC3E,GAAI86B,OAAQrnB,KAAKsnB,IAAI,EAAE,GACvB,SAASC,OAAMrD,EAAE6C,GAAG,GAAG7C,EAAEmD,OAAOnD,GAAGmD,MAAO,MAAOH,QAAOhD,EAAE6C,EAAI,IAAIh6B,GAAIiT,KAAKmnB,MAAMjD,EAAI,OAAOkD,QAAOr6B,EAAEg6B,GACrG,QAASS,WAAU96B,EAAGK,GAAK,MAAOL,GAAEQ,QAAU,EAAIH,IAAML,EAAEuB,WAAWlB,GAAG,MAAQ,MAAQL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,MAAQL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,MAAQL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,MAAQL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,MAAQL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,KAAOL,EAAEuB,WAAWlB,EAAE,GAAG,MAAQ,IAE3R,GAAI06B,YACF,WAAY,IACZ,SAAU,KACV,MAAO,OAET,SAASC,SAAQ/6B,GAChB,IAAI,GAAI0D,GAAI,EAAGA,GAAKo3B,SAASv6B,SAAUmD,EAAG,GAAG1D,EAAE86B,SAASp3B,GAAG,MAAM4F,UAAWtJ,EAAE86B,SAASp3B,GAAG,IAAIo3B,SAASp3B,GAAG,GAE3Gs2B,IAAIxI,KAAOsJ,QACX,IAAIE,YACH,EAAI,UACJx6B,EAAI,IACJsB,EAAI,OACJW,EAAI,QACJU,EAAI,WACJmE,EAAI,KACJiB,GAAI,QACJU,GAAI,WACJM,GAAI,QACJK,GAAI,UACJsG,GAAI,SACJI,GAAI,WACJG,GAAI,QACJE,GAAI,SACJa,GAAI,aACJM,GAAI,gBACJC,GAAI,OACJwB,GAAI,UACJmB,GAAI,cACJ0e,GAAI,iBACJQ,GAAI,sBACJuF,GAAI,sBACJ8B,GAAI,2BACJC,GAAI,QACJC,GAAI,YACJC,GAAI,SACJC,GAAI,WACJC,GAAI,IACJC,GAAI,2BACJC,MAAO,UAER,IAAIC,QACF,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,cACP,MAAO,aACP,MAAO,WACP,MAAO,YAET,IAAIC,UACF,IAAK,MAAO,YACZ,IAAK,MAAO,aACZ,IAAK,MAAO,UACZ,IAAK,MAAO,UACZ,IAAK,MAAO,QACZ,IAAK,MAAO,SACZ,IAAK,MAAO,SACZ,IAAK,MAAO,WACZ,IAAK,MAAO,cACZ,IAAK,MAAO,YACZ,IAAK,MAAO,aACZ,IAAK,MAAO,YAEd,SAASC,MAAKl4B,EAAGm4B,EAAGC,OACnB,GAAIC,KAAMr4B,EAAI,GAAK,EAAI,CACvB,IAAIs4B,GAAIt4B,EAAIq4B,GACZ,IAAIE,KAAM,EAAGC,IAAM,EAAGC,EAAI,CAC1B,IAAIC,KAAM,EAAGC,IAAM,EAAGC,EAAI,CAC1B,IAAIC,GAAIjpB,KAAKS,MAAMioB,EACnB,OAAMK,IAAMR,EAAG,CACdU,EAAIjpB,KAAKS,MAAMioB,EACfG,GAAII,EAAIL,IAAMD,GACdK,GAAIC,EAAIF,IAAMD,GACd,IAAIJ,EAAIO,EAAK,MAAc,KAC3BP,GAAI,GAAKA,EAAIO,EACbN,KAAMC,GAAKA,KAAMC,CACjBC,KAAMC,GAAKA,KAAMC,EAElB,GAAGA,EAAIT,EAAG,CAAES,EAAID,GAAKF,GAAID,IACzB,GAAGI,EAAIT,EAAG,CAAES,EAAIF,GAAKD,GAAIF,IACzB,IAAIH,MAAO,OAAQ,EAAGC,IAAMI,EAAGG,EAC/B,IAAGA,IAAI,EAAG,KAAM,qBAAqBH,EAAE,IAAID,IAAI,IAAID,IAAI,IAAIK,EAAE,IAAID,IAAI,IAAID,GACzE,IAAIhN,GAAI9b,KAAKS,MAAMgoB,IAAMI,EAAEG,EAC3B,QAAQlN,EAAG2M,IAAII,EAAI/M,EAAEkN,EAAGA,GAEzB,QAASE,iBAAgBhF,EAAG/F,MAAQ,MAAO,GAAG+F,EAC9CyC,IAAIwC,aAAeD,eACnB,IAAIE,iBAAkB,QAAUC,wBAChC,GAAIC,MAAO,kBAAmBC,KAAO,QAASC,KAAO,iBAAkBC,KAAO,WAAYC,KAAO,cACjG,SAASC,MAAKzF,GACb,GAAItB,GAAKsB,EAAE,EAAE,GAAG,EAChB,IAAIv3B,GAAIi9B,KAAK1F,EAAE2F,QAAQ,IAAM,IAAGl9B,EAAEO,QAAU01B,EAAG,MAAOj2B,EACtDA,GAAIu3B,EAAE4F,YAAY,GAAK,IAAGn9B,EAAEO,QAAU01B,EAAG,MAAOj2B,EAChD,OAAOu3B,GAAE6F,cAAc,GAExB,QAASC,MAAK9F,GACb,GAAIv3B,GAAIu3B,EAAE2F,QAAQ,IAAIx7B,QAAQi7B,KAAK,MACnC,IAAG38B,EAAEO,QAAUg3B,EAAE,EAAE,GAAG,IAAKv3B,EAAIu3B,EAAE4F,YAAY,EAC7C,OAAOn9B,GAER,QAASs9B,MAAKt9B,GACb,IAAI,GAAII,GAAI,EAAGA,GAAKJ,EAAEO,SAAUH,EAAG,IAAIJ,EAAEsB,WAAWlB,GAAK,MAAU,IAAK,MAAOJ,GAAE0B,QAAQm7B,KAAK,OAAOn7B,QAAQo7B,KAAK,KAAKp7B,QAAQ,IAAI,KAAKA,QAAQq7B,KAAK,QACrJ,OAAO/8B,GAER,QAASi9B,MAAKj9B,GAGb,MAAOA,GAAE2B,QAAQ,MAAQ,EAAI3B,EAAE0B,QAAQk7B,KAAK,IAAIl7B,QAAQi7B,KAAK,OAAS38B,EAEvE,MAAO,SAASy8B,iBAAgBlF,EAAG/F,MAClC,GAAI+L,GAAIlqB,KAAKS,MAAMT,KAAKmqB,IAAInqB,KAAKoqB,IAAIlG,IAAIlkB,KAAKqqB,QAAS19B,CACvD,IAAGu9B,IAAM,GAAKA,IAAM,EAAGv9B,EAAIu3B,EAAE4F,YAAY,GAAGI,OACvC,IAAGlqB,KAAKoqB,IAAIF,IAAM,EAAGv9B,EAAIg9B,KAAKzF,OAC9B,IAAGgG,IAAM,GAAIv9B,EAAIu3B,EAAE2F,QAAQ,IAAInD,OAAO,EAAE,QACxC/5B,GAAIq9B,KAAK9F,EACd,OAAO0F,MAAKK,KAAKt9B,OAElBg6B,KAAI2D,aAAelB,eACnB,SAASmB,aAAYrG,EAAG/F,MACvB,aAAc+F,IACb,IAAK,SAAU,MAAOA,EACtB,KAAK,UAAW,MAAOA,GAAI,OAAS,OACpC,KAAK,SAAU,OAAQA,EAAE,KAAOA,EAAIgF,gBAAgBhF,EAAG/F,MAAQiL,gBAAgBlF,EAAG/F,MAEnF,KAAM,IAAInxB,OAAM,wCAA0Ck3B,GAE3DyC,IAAI6D,SAAWD,WACf,SAASE,WAAUr4B,KAAMzF,GAAK,MAAO,GACrC,QAAS+9B,iBAAgBxG,EAAE/F,KAAKwM,IAC/B,GAAGzG,EAAI,SAAWA,EAAI,EAAG,MAAO,KAChC,IAAI9xB,MAAQ8xB,EAAE,EAAIxN,KAAO1W,KAAKS,MAAM,OAASyjB,EAAI9xB,OAAQw4B,IAAI,CAC7D,IAAIC,QACJ,IAAIxzB,MAAKkxB,EAAEn2B,KAAM04B,EAAEpU,KAAM9pB,EAAE,OAAOs3B,EAAE9xB,MAAMskB,KAAKrmB,EAAE,EAAE8hB,EAAE,EAAE4U,EAAE,EAAEgE,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEnP,EAAE,EACzE,IAAG9b,KAAKoqB,IAAI/yB,IAAIzK,GAAK,KAAMyK,IAAIzK,EAAI,CACnC86B,SAAQvJ,MAAQ,KAAOA,KAAQA,QAC/B,IAAGA,KAAK+M,SAAU94B,MAAQ,IAC1B,IAAGiF,IAAIzK,EAAI,KAAO,CACjByK,IAAIzK,EAAI,CACR,MAAK8pB,MAAQ,MAAO,CAAEA,KAAO,IAAKtkB,MAEnC,GAAGA,OAAS,GAAI,CAACy4B,KAAOF,IAAM,KAAK,GAAG,KAAO,KAAK,EAAE,GAAKC,KAAI,MACxD,IAAGx4B,OAAS,EAAG,CAACy4B,KAAOF,IAAM,KAAK,EAAE,KAAO,KAAK,EAAE,EAAIC,KAAI,MAC1D,CACJ,GAAGx4B,KAAO,KAAMA,IAEhB,IAAI20B,GAAI,GAAIj1B,MAAK,KAAK,EAAE,EACxBi1B,GAAEoE,QAAQpE,EAAE5sB,UAAY/H,KAAO,EAC/By4B,OAAQ9D,EAAE9sB,cAAe8sB,EAAE7sB,WAAW,EAAE6sB,EAAE5sB,UAC1CywB,KAAM7D,EAAEqE,QACR,IAAGh5B,KAAO,GAAIw4B,KAAOA,IAAM,GAAK,CAChC,IAAGD,GAAIC,IAAMH,UAAU1D,EAAG8D,MAE3BxzB,IAAIhH,EAAIw6B,KAAK,EAAIxzB,KAAI8a,EAAI0Y,KAAK,EAAIxzB,KAAI0vB,EAAI8D,KAAK,EAC/CxzB,KAAI4zB,EAAIvU,KAAO,EAAIA,MAAO1W,KAAKS,MAAMiW,KAAO,GAC5Crf,KAAI2zB,EAAItU,KAAO,EAAIA,MAAO1W,KAAKS,MAAMiW,KAAO,GAC5Crf,KAAI0zB,EAAIrU,IACRrf,KAAIykB,EAAI8O,GACR,OAAOvzB,KAERsvB,IAAI+D,gBAAkBA,eAEtB,SAASW,YAAWn4B,KAAMo4B,IAAKhV,IAAKiV,KACnC,GAAI5+B,GAAE,GAAI6+B,GAAG,EAAGC,GAAG,EAAGp7B,EAAIimB,IAAIjmB,EAAGgH,IAAKq0B,KAAO,CAC7C,QAAOx4B,MACN,IAAK,IACJ7C,EAAIimB,IAAIjmB,EAAI,GAEb,KAAK,KACL,OAAOi7B,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAMhH,EAAI,GAAKq7B,MAAO,CAAG,MACzC,SAASr0B,IAAMhH,EAAI,GAAOq7B,MAAO,CAAG,OACnC,KACF,KAAK,KACL,OAAOJ,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAMif,IAAInE,CAAGuZ,MAAOJ,IAAIp+B,MAAQ,MAChD,KAAK,GAAG,MAAOm7B,QAAO/R,IAAInE,EAAE,GAAG,EAC/B,KAAK,GAAG,MAAOkW,QAAO/R,IAAInE,EAAE,GAAG,EAC/B,SAAS,MAAOkW,QAAO/R,IAAInE,EAAE,GAAG,GAC/B,KACF,KAAK,KACL,OAAOmZ,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAMif,IAAIyQ,CAAG2E,MAAOJ,IAAIp+B,MAAQ,MAChD,KAAK,GAAG,MAAOk7B,MAAK9R,IAAIwF,GAAG,EAC3B,SAAS,MAAOsM,MAAK9R,IAAIwF,GAAG,GAC3B,KACF,KAAK,KACL,OAAOwP,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAM,GAAGif,IAAIyU,EAAE,IAAI,EAAIW,MAAOJ,IAAIp+B,MAAQ,MAC1D,SAAS,KAAM,oBAAsBo+B,IACpC,KACF,KAAK,IACL,OAAOA,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAMif,IAAIyU,CAAGW,MAAOJ,IAAIp+B,MAAQ,MAChD,SAAS,KAAM,oBAAsBo+B,IACpC,KACF,KAAK,IACL,OAAOA,IAAIp+B,QACV,IAAK,GAAG,IAAK,GAAGmK,IAAMif,IAAI0U,CAAGU,MAAOJ,IAAIp+B,MAAQ,MAChD,SAAS,KAAM,sBAAwBo+B,IACtC,KACF,KAAK,KACL,GAAGhV,IAAI1pB,IAAM,EAAG,OAAO0+B,KACtB,IAAK,IAAK,IAAK,KAAM,MAAOxE,MAAKxQ,IAAI2U,EAAGK,IAAIp+B,OAC5C,KAAK,KAAM,IAAK,MAAO,IAAK,QAE7B,OAAOo+B,KACN,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,MAAO,IAAK,OAChD,GAAGC,KAAO,EAAGE,GAAKF,MAAQ,EAAI,IAAO,QAChCE,IAAKF,MAAQ,EAAI,GAAK,CAC3BC,IAAKxrB,KAAKmnB,MAAM,IAAM7Q,IAAI2U,EAAI3U,IAAI1pB,GAClC,IAAG4+B,IAAM,GAAGC,GAAID,GAAK,CACrB,IAAGF,MAAQ,IAAK,MAAOE,MAAO,EAAI,IAAM,GAAGA,GAAGC,EAC9C9+B,GAAIm6B,KAAK0E,GAAG,EAAID,IAChB,IAAGD,MAAQ,KAAM,MAAO3+B,GAAE+5B,OAAO,EAAE,EACnC,OAAO,IAAM/5B,EAAE+5B,OAAO,EAAE4E,IAAIp+B,OAAO,EACpC,SAAS,KAAM,sBAAwBo+B,IAExC,IAAK,IACL,OAAOA,KACN,IAAK,MAAO,IAAK,OAAQj0B,IAAMif,IAAIiS,EAAE,GAAGjS,IAAIyU,CAAG,MAC/C,KAAK,MAAO,IAAK,OAAQ1zB,KAAOif,IAAIiS,EAAE,GAAGjS,IAAIyU,GAAG,GAAGzU,IAAI0U,CAAG,MAC1D,KAAK,MAAO,IAAK,OAAQ3zB,MAAQif,IAAIiS,EAAE,GAAGjS,IAAIyU,GAAG,GAAGzU,IAAI0U,GAAG,GAAGhrB,KAAKmnB,MAAM7Q,IAAI2U,EAAE3U,IAAI1pB,EAAI,MACvF,SAAS,KAAM,uBAAyB0+B,IACvCI,KAAOJ,IAAIp+B,SAAW,EAAI,EAAI,CAAG,MACnC,KAAK,KACJmK,IAAMhH,CAAGq7B,MAAO,EAElB,GAAGA,KAAO,EAAG,MAAO5E,MAAKzvB,IAAKq0B,UAAY,OAAO,GAGlD,QAASC,UAASj/B,GACjB,GAAGA,EAAEQ,QAAU,EAAG,MAAOR,EACzB,IAAIy3B,GAAKz3B,EAAEQ,OAAS,EAAIP,EAAID,EAAEg6B,OAAO,EAAEvC,EACvC,MAAMA,GAAGz3B,EAAEQ,OAAQi3B,GAAG,EAAGx3B,IAAIA,EAAEO,OAAS,EAAI,IAAM,IAAMR,EAAEg6B,OAAOvC,EAAE,EACnE,OAAOx3B,GAER,GAAIi/B,WAAY,QAAUC,kBAC1B,GAAIC,MAAO,IACX,SAASC,eAAc74B,KAAMo4B,IAAKhV,KACjC,GAAI0V,MAAOV,IAAIj9B,QAAQy9B,KAAK,IAAKG,IAAMX,IAAIp+B,OAAS8+B,KAAK9+B,MACzD,OAAO0+B,WAAU14B,KAAM84B,KAAM1V,IAAMtW,KAAKsnB,IAAI,GAAG,EAAE2E,MAAQ1M,KAAK,IAAI0M,KAEnE,QAASC,cAAah5B,KAAMo4B,IAAKhV,KAChC,GAAI6V,KAAMb,IAAIp+B,OAAS,CACvB,OAAMo+B,IAAIr9B,WAAWk+B,IAAI,KAAO,KAAMA,GACtC,OAAOP,WAAU14B,KAAMo4B,IAAI5E,OAAO,EAAEyF,KAAM7V,IAAMtW,KAAKsnB,IAAI,GAAG,GAAGgE,IAAIp+B,OAAOi/B,OAE3E,QAASC,eAAcd,IAAKhV,KAC3B,GAAI3pB,EACJ,IAAIw/B,KAAMb,IAAIh9B,QAAQ,KAAOg9B,IAAIh9B,QAAQ,KAAO,CAChD,IAAGg9B,IAAIra,MAAM,eAAgB,CAC5B,GAAIob,QAASf,IAAIh9B,QAAQ,IAAM,IAAG+9B,UAAY,EAAGA,OAAOf,IAAIh9B,QAAQ,IACpE,IAAIg+B,IAAKtsB,KAAKS,MAAMT,KAAKmqB,IAAInqB,KAAKoqB,IAAI9T,MAAMtW,KAAKqqB,QAAQgC,MACzD,IAAGC,GAAK,EAAGA,IAAMD,MACjB1/B,IAAK2pB,IAAItW,KAAKsnB,IAAI,GAAGgF,KAAKxC,YAAYqC,IAAI,GAAGE,OAAOC,IAAID,OACxD,IAAG1/B,EAAE2B,QAAQ,QAAU,EAAG,CACzB,GAAIi+B,OAAQvsB,KAAKS,MAAMT,KAAKmqB,IAAInqB,KAAKoqB,IAAI9T,MAAMtW,KAAKqqB,OACpD,IAAG19B,EAAE2B,QAAQ,QAAU,EAAG3B,EAAIA,EAAE,GAAK,IAAMA,EAAE+5B,OAAO,GAAK,MAAQ6F,MAAQ5/B,EAAEO,OAAOo/B,QAC7E3/B,IAAK,MAAQ4/B,MAAQD,GAC1B,OAAM3/B,EAAE+5B,OAAO,EAAE,KAAO,KAAM,CAC7B/5B,EAAIA,EAAE,GAAKA,EAAE+5B,OAAO,EAAE2F,QAAU,IAAM1/B,EAAE+5B,OAAO,EAAE2F,OACjD1/B,GAAIA,EAAE0B,QAAQ,aAAa,MAAMA,QAAQ,QAAQ,MAElD1B,EAAIA,EAAE0B,QAAQ,MAAM,KAErB1B,EAAIA,EAAE0B,QAAQ,2BAA2B,SAASm+B,GAAGC,GAAGC,GAAGC,IAAM,MAAOF,IAAKC,GAAKC,GAAGjG,OAAO,GAAG2F,OAAOC,IAAID,QAAU,IAAMM,GAAGjG,OAAO4F,IAAM,UACpI3/B,GAAI2pB,IAAIyT,cAAcoC,IAC7B,IAAGb,IAAIra,MAAM,WAAatkB,EAAEskB,MAAM,YAAatkB,EAAIA,EAAE+5B,OAAO,EAAE/5B,EAAEO,OAAO,GAAK,IAAMP,EAAEA,EAAEO,OAAO,EAC7F,IAAGo+B,IAAIra,MAAM,QAAUtkB,EAAEskB,MAAM,OAAQtkB,EAAIA,EAAE0B,QAAQ,MAAM,IAC3D,OAAO1B,GAAE0B,QAAQ,IAAI,KAEtB,GAAIu+B,OAAQ,wBACZ,SAASC,cAAapgC,EAAGqgC,KAAMC,MAC9B,GAAIC,KAAMC,SAASxgC,EAAE,IAAKygC,GAAKltB,KAAKmnB,MAAM2F,KAAOE,KAAMtN,KAAO1f,KAAKS,MAAMysB,GAAGF,IAC5E,IAAIG,KAAOD,GAAKxN,KAAKsN,IAAMI,IAAMJ,GACjC,OAAOD,OAAQrN,OAAS,EAAI,GAAK,GAAGA,MAAQ,KAAOyN,MAAQ,EAAI5N,KAAK,IAAK9yB,EAAE,GAAGS,OAAS,EAAIT,EAAE,GAAGS,QAAU85B,KAAKmG,IAAI1gC,EAAE,GAAGS,QAAUT,EAAE,GAAK,IAAMA,EAAE,GAAKq6B,KAAKsG,IAAI3gC,EAAE,GAAGS,SAErK,QAASmgC,cAAa5gC,EAAGqgC,KAAMC,MAC9B,MAAOA,OAAQD,OAAS,EAAI,GAAK,GAAGA,MAAQvN,KAAK,IAAK9yB,EAAE,GAAGS,OAAS,EAAIT,EAAE,GAAGS,QAE9E,GAAIogC,MAAO,aACX,IAAIC,YAAa,UACjB,IAAIC,OAAQ,qBACZ,SAASC,OAAMh7B,KACd,GAAI9F,GAAI,GAAI+gC,EACZ,KAAI,GAAI3gC,GAAI,EAAGA,GAAK0F,IAAIvF,SAAUH,EAAG,OAAQ2gC,GAAGj7B,IAAIxE,WAAWlB,IAC9D,IAAK,IAAI,KACT,KAAK,IAAIJ,GAAI,GAAK,MAClB,KAAK,IAAIA,GAAI,GAAK,MAClB,SAASA,GAAI4B,OAAOC,aAAak/B,IAElC,MAAO/gC,GAER,QAASghC,KAAIrX,IAAKyQ,GAAK,GAAI6G,IAAK5tB,KAAKsnB,IAAI,GAAGP,EAAI,OAAO,GAAI/mB,KAAKmnB,MAAM7Q,IAAMsX,IAAIA,GAChF,QAAS51B,KAAIse,IAAKyQ,GAAK,MAAO/mB,MAAKmnB,OAAO7Q,IAAItW,KAAKS,MAAM6V,MAAMtW,KAAKsnB,IAAI,GAAGP,IAC3E,QAAS8G,KAAIvX,KAAO,GAAGA,IAAM,YAAcA,KAAO,WAAY,MAAO,IAAIA,KAAO,EAAKA,IAAI,EAAMA,IAAI,EAAE,EAAK,OAAO,GAAGtW,KAAKS,MAAM6V,KAC/H,QAASwX,eAAc56B,KAAMo4B,IAAKhV,KACjC,GAAGpjB,KAAKjF,WAAW,KAAO,KAAOq9B,IAAIra,MAAMsc,YAAa,CACvD,GAAIQ,MAAOzC,IAAIj9B,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,GACjE,IAAGioB,KAAO,EAAG,MAAOwX,eAAc,IAAKC,KAAMzX,IAC7C,OAAO,IAAMwX,cAAc,IAAKC,MAAOzX,KAAO,IAE/C,GAAGgV,IAAIr9B,WAAWq9B,IAAIp+B,OAAS,KAAO,GAAI,MAAOg/B,cAAah5B,KAAMo4B,IAAKhV,IACzE,IAAGgV,IAAIh9B,QAAQ,QAAU,EAAG,MAAOy9B,eAAc74B,KAAMo4B,IAAKhV,IAC5D,IAAGgV,IAAIh9B,QAAQ,QAAU,EAAG,MAAO89B,eAAcd,IAAKhV,IACtD,IAAGgV,IAAIr9B,WAAW,KAAO,GAAI,MAAO,IAAI6/B,cAAc56B,KAAKo4B,IAAI5E,OAAO4E,IAAI,IAAI,IAAI,EAAE,GAAGhV,IACvF,IAAI3pB,GAAGqhC,EACP,IAAIvhC,GAAGwhC,GAAIC,GAAIpB,KAAO9sB,KAAKoqB,IAAI9T,KAAMyW,KAAOzW,IAAM,EAAI,IAAM,EAC5D,IAAGgV,IAAIra,MAAM,SAAU,MAAO8b,MAAOxF,MAAMuF,KAAKxB,IAAIp+B,OACpD,IAAGo+B,IAAIra,MAAM,WAAY,CACxBtkB,EAAI46B,MAAMjR,IAAI,EAAI,IAAG3pB,IAAM,IAAKA,EAAI,EACpC,OAAOA,GAAEO,OAASo+B,IAAIp+B,OAASP,EAAI8gC,MAAMnC,IAAI5E,OAAO,EAAE4E,IAAIp+B,OAAOP,EAAEO,SAAWP,EAE/E,IAAIF,EAAI6+B,IAAIra,MAAM2b,UAAY,KAAM,MAAOC,cAAapgC,EAAGqgC,KAAMC,KACjE,IAAGzB,IAAIra,MAAM,YAAc,KAAM,MAAO8b,MAAOxF,MAAMuF,KAAKxB,IAAIp+B,OAASo+B,IAAIh9B,QAAQ,KACnF,KAAI7B,EAAI6+B,IAAIra,MAAMqc,SAAW,KAAM,CAClC3gC,EAAIghC,IAAIrX,IAAK7pB,EAAE,GAAGS,QAAQmB,QAAQ,aAAa,MAAM5B,EAAE,IAAI4B,QAAQ,MAAM,IAAI5B,EAAE,IAAI4B,QAAQ,WAAW,SAASm+B,GAAIC,IAAM,MAAO,IAAMA,GAAKlN,KAAK,IAAK9yB,EAAE,GAAGS,OAAOu/B,GAAGv/B,SACpK,OAAOo+B,KAAIh9B,QAAQ,SAAW,EAAI3B,EAAIA,EAAE0B,QAAQ,OAAO,KAExDi9B,IAAMA,IAAIj9B,QAAQ,YAAa,KAC/B,KAAI5B,EAAI6+B,IAAIra,MAAM,mBAAqB,KAAM,CAC5C,MAAO8b,MAAOY,IAAIb,KAAMrgC,EAAE,GAAGS,QAAQmB,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO5B,EAAE,GAAGS,OAAO,KAAK,KAElI,IAAIT,EAAI6+B,IAAIra,MAAM,mBAAqB,KAAM,MAAO8b,MAAOpB,SAASpE,MAAMuF,KAAK,GAC/E,KAAIrgC,EAAI6+B,IAAIra,MAAM,wBAA0B,KAAM,CACjD,MAAOqF,KAAM,EAAI,IAAMwX,cAAc56B,KAAMo4B,KAAMhV,KAAOqV,SAAS,GAAI3rB,KAAKS,MAAM6V,MAAS,IAAMwQ,KAAK9uB,IAAIse,IAAK7pB,EAAE,GAAGS,QAAQT,EAAE,GAAGS,QAEhI,IAAIT,EAAI6+B,IAAIra,MAAM,eAAiB,KAAM,MAAO6c,eAAc56B,KAAKo4B,IAAIj9B,QAAQ,SAAS,IAAIioB,IAC5F,KAAI7pB,EAAI6+B,IAAIra,MAAM,8BAAgC,KAAM,CACvDtkB,EAAIk6B,QAAQiH,cAAc56B,KAAMo4B,IAAIj9B,QAAQ,SAAS,IAAKioB,KAC1D2X,IAAK,CACL,OAAOpH,SAAQA,QAAQyE,IAAIj9B,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAAS+B,GAAG,MAAO69B,IAAGthC,EAAEO,OAAOP,EAAEshC,MAAM79B,IAAI,IAAI,IAAI,MAElH,GAAGk7B,IAAIra,MAAMuc,SAAW,KAAM,CAC7B7gC,EAAImhC,cAAc56B,KAAM,aAAcojB,IACtC,OAAO,IAAM3pB,EAAE+5B,OAAO,EAAE,GAAK,KAAO/5B,EAAE+5B,OAAO,EAAG,GAAK,IAAM/5B,EAAE+5B,OAAO,GAErE,GAAIyH,IAAK,EACT,KAAI1hC,EAAI6+B,IAAIra,MAAM,kCAAoC,KAAM,CAC3Dgd,GAAKjuB,KAAKC,IAAIxT,EAAE,GAAGS,OAAO,EAC1BghC,IAAK5F,KAAKwE,KAAM9sB,KAAKsnB,IAAI,GAAG2G,IAAI,EAAG,MACnCthC,GAAI,GAAKogC,IACToB,IAAKvC,UAAU,IAAKn/B,EAAE,GAAIyhC,GAAG,GAC7B,IAAGC,GAAGA,GAAGjhC,OAAO,IAAM,IAAKihC,GAAKA,GAAGzH,OAAO,EAAEyH,GAAGjhC,OAAO,GAAK,GAC3DP,IAAKwhC,GAAK1hC,EAAE,GAAK,IAAMA,EAAE,EACzB0hC,IAAKlH,MAAMiH,GAAG,GAAGD,GACjB,IAAGE,GAAGjhC,OAAST,EAAE,GAAGS,OAAQihC,GAAKV,MAAMhhC,EAAE,GAAGi6B,OAAOj6B,EAAE,GAAGS,OAAOihC,GAAGjhC,SAAWihC,EAC7ExhC,IAAKwhC,EACL,OAAOxhC,GAER,IAAIF,EAAI6+B,IAAIra,MAAM,oCAAsC,KAAM,CAC7Dgd,GAAKjuB,KAAKC,IAAID,KAAKX,IAAI5S,EAAE,GAAGS,OAAQT,EAAE,GAAGS,QAAQ,EACjDghC,IAAK5F,KAAKwE,KAAM9sB,KAAKsnB,IAAI,GAAG2G,IAAI,EAAG,KACnC,OAAOlB,OAAQmB,GAAG,KAAKA,GAAG,GAAK,GAAK,MAAQ,KAAOA,GAAG,GAAKlH,KAAKkH,GAAG,GAAGD,IAAMxhC,EAAE,GAAK,IAAMA,EAAE,GAAKw6B,MAAMiH,GAAG,GAAGD,IAAK1O,KAAK,IAAK,EAAE0O,GAAG,EAAIxhC,EAAE,GAAGS,OAAST,EAAE,GAAGS,SAExJ,IAAIT,EAAI6+B,IAAIra,MAAM,eAAiB,KAAM,CACxCtkB,EAAI46B,MAAMjR,IAAK,EACf,IAAGgV,IAAIp+B,QAAUP,EAAEO,OAAQ,MAAOP,EAClC,OAAO8gC,OAAMnC,IAAI5E,OAAO,EAAE4E,IAAIp+B,OAAOP,EAAEO,SAAWP,EAElD,IAAIF,EAAI6+B,IAAIra,MAAM,0BAA4B,KAAM,CACpDtkB,EAAI,GAAK2pB,IAAIuT,QAAQ7pB,KAAKC,IAAIxT,EAAE,GAAGS,OAAO,KAAKmB,QAAQ,YAAY,KACnE4/B,IAAKthC,EAAE2B,QAAQ,IACf,IAAI8/B,MAAO9C,IAAIh9B,QAAQ,KAAO2/B,GAAII,KAAO/C,IAAIp+B,OAASP,EAAEO,OAASkhC,IACjE,OAAOX,OAAMnC,IAAI5E,OAAO,EAAE0H,MAAQzhC,EAAI2+B,IAAI5E,OAAO4E,IAAIp+B,OAAOmhC,OAE7D,IAAI5hC,EAAI6+B,IAAIra,MAAM,yBAA2B,KAAM,CAClDgd,GAAKj2B,IAAIse,IAAK7pB,EAAE,GAAGS,OACnB,OAAOopB,KAAM,EAAI,IAAMwX,cAAc56B,KAAMo4B,KAAMhV,KAAOqV,SAASkC,IAAIvX,MAAMjoB,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAASm+B,IAAM,MAAO,OAASA,GAAGt/B,OAAS,EAAI45B,KAAK,EAAE,EAAE0F,GAAGt/B,QAAU,IAAMs/B,KAAS,IAAM1F,KAAKmH,GAAGxhC,EAAE,GAAGS,QAE/N,OAAOo+B,KACN,IAAK,QAAS,GAAIl7B,GAAIu7B,SAASpE,MAAMuF,KAAK,GAAK,OAAO18B,KAAM,IAAM28B,KAAO38B,EAAI,EAC7E,UAED,KAAM,IAAIpD,OAAM,uBAAyBs+B,IAAM,KAEhD,QAASgD,eAAcp7B,KAAMo4B,IAAKhV,KACjC,GAAI6V,KAAMb,IAAIp+B,OAAS,CACvB,OAAMo+B,IAAIr9B,WAAWk+B,IAAI,KAAO,KAAMA,GACtC,OAAOP,WAAU14B,KAAMo4B,IAAI5E,OAAO,EAAEyF,KAAM7V,IAAMtW,KAAKsnB,IAAI,GAAG,GAAGgE,IAAIp+B,OAAOi/B,OAE3E,QAASoC,gBAAer7B,KAAMo4B,IAAKhV,KAClC,GAAI0V,MAAOV,IAAIj9B,QAAQy9B,KAAK,IAAKG,IAAMX,IAAIp+B,OAAS8+B,KAAK9+B,MACzD,OAAO0+B,WAAU14B,KAAM84B,KAAM1V,IAAMtW,KAAKsnB,IAAI,GAAG,EAAE2E,MAAQ1M,KAAK,IAAI0M,KAEnE,QAASuC,gBAAelD,IAAKhV,KAC5B,GAAI3pB,EACJ,IAAIw/B,KAAMb,IAAIh9B,QAAQ,KAAOg9B,IAAIh9B,QAAQ,KAAO,CAChD,IAAGg9B,IAAIra,MAAM,eAAgB,CAC5B,GAAIob,QAASf,IAAIh9B,QAAQ,IAAM,IAAG+9B,UAAY,EAAGA,OAAOf,IAAIh9B,QAAQ,IACpE,IAAIg+B,IAAKtsB,KAAKS,MAAMT,KAAKmqB,IAAInqB,KAAKoqB,IAAI9T,MAAMtW,KAAKqqB,QAAQgC,MACzD,IAAGC,GAAK,EAAGA,IAAMD,MACjB1/B,IAAK2pB,IAAItW,KAAKsnB,IAAI,GAAGgF,KAAKxC,YAAYqC,IAAI,GAAGE,OAAOC,IAAID,OACxD,KAAI1/B,EAAEskB,MAAM,QAAS,CACpB,GAAIsb,OAAQvsB,KAAKS,MAAMT,KAAKmqB,IAAInqB,KAAKoqB,IAAI9T,MAAMtW,KAAKqqB,OACpD,IAAG19B,EAAE2B,QAAQ,QAAU,EAAG3B,EAAIA,EAAE,GAAK,IAAMA,EAAE+5B,OAAO,GAAK,MAAQ6F,MAAQ5/B,EAAEO,OAAOo/B,QAC7E3/B,IAAK,MAAQ4/B,MAAQD,GAC1B3/B,GAAIA,EAAE0B,QAAQ,MAAM,KAErB1B,EAAIA,EAAE0B,QAAQ,2BAA2B,SAASm+B,GAAGC,GAAGC,GAAGC,IAAM,MAAOF,IAAKC,GAAKC,GAAGjG,OAAO,GAAG2F,OAAOC,IAAID,QAAU,IAAMM,GAAGjG,OAAO4F,IAAM,UACpI3/B,GAAI2pB,IAAIyT,cAAcoC,IAC7B,IAAGb,IAAIra,MAAM,WAAatkB,EAAEskB,MAAM,YAAatkB,EAAIA,EAAE+5B,OAAO,EAAE/5B,EAAEO,OAAO,GAAK,IAAMP,EAAEA,EAAEO,OAAO,EAC7F,IAAGo+B,IAAIra,MAAM,QAAUtkB,EAAEskB,MAAM,OAAQtkB,EAAIA,EAAE0B,QAAQ,MAAM,IAC3D,OAAO1B,GAAE0B,QAAQ,IAAI,KAEtB,QAASogC,eAAcv7B,KAAMo4B,IAAKhV,KACjC,GAAGpjB,KAAKjF,WAAW,KAAO,KAAOq9B,IAAIra,MAAMsc,YAAa,CACvD,GAAIQ,MAAOzC,IAAIj9B,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,GACjE,IAAGioB,KAAO,EAAG,MAAOmY,eAAc,IAAKV,KAAMzX,IAC7C,OAAO,IAAMmY,cAAc,IAAKV,MAAOzX,KAAO,IAE/C,GAAGgV,IAAIr9B,WAAWq9B,IAAIp+B,OAAS,KAAO,GAAI,MAAOohC,eAAcp7B,KAAMo4B,IAAKhV,IAC1E,IAAGgV,IAAIh9B,QAAQ,QAAU,EAAG,MAAOigC,gBAAer7B,KAAMo4B,IAAKhV,IAC7D,IAAGgV,IAAIh9B,QAAQ,QAAU,EAAG,MAAOkgC,gBAAelD,IAAKhV,IACvD,IAAGgV,IAAIr9B,WAAW,KAAO,GAAI,MAAO,IAAIwgC,cAAcv7B,KAAKo4B,IAAI5E,OAAO4E,IAAI,IAAI,IAAI,EAAE,GAAGhV,IACvF,IAAI3pB,EACJ,IAAIF,GAAGwhC,GAAIC,GAAIpB,KAAO9sB,KAAKoqB,IAAI9T,KAAMyW,KAAOzW,IAAM,EAAI,IAAM,EAC5D,IAAGgV,IAAIra,MAAM,SAAU,MAAO8b,MAAOjG,KAAKgG,KAAKxB,IAAIp+B,OACnD,IAAGo+B,IAAIra,MAAM,WAAY,CACxBtkB,EAAK,GAAG2pB,GAAM,IAAGA,MAAQ,EAAG3pB,EAAI,EAChC,OAAOA,GAAEO,OAASo+B,IAAIp+B,OAASP,EAAI8gC,MAAMnC,IAAI5E,OAAO,EAAE4E,IAAIp+B,OAAOP,EAAEO,SAAWP,EAE/E,IAAIF,EAAI6+B,IAAIra,MAAM2b,UAAY,KAAM,MAAOS,cAAa5gC,EAAGqgC,KAAMC,KACjE,IAAGzB,IAAIra,MAAM,YAAc,KAAM,MAAO8b,MAAOjG,KAAKgG,KAAKxB,IAAIp+B,OAASo+B,IAAIh9B,QAAQ,KAClF,KAAI7B,EAAI6+B,IAAIra,MAAMqc,SAAW,KAAM,CAClC3gC,GAAK,GAAG2pB,KAAKjoB,QAAQ,aAAa,MAAM5B,EAAE,IAAI4B,QAAQ,MAAM,IAAI5B,EAAE,IAAI4B,QAAQ,WAAW,SAASm+B,GAAIC,IAAM,MAAO,IAAMA,GAAKlN,KAAK,IAAK9yB,EAAE,GAAGS,OAAOu/B,GAAGv/B,SACvJ,OAAOo+B,KAAIh9B,QAAQ,SAAW,EAAI3B,EAAIA,EAAE0B,QAAQ,OAAO,KAExDi9B,IAAMA,IAAIj9B,QAAQ,YAAa,KAC/B,KAAI5B,EAAI6+B,IAAIra,MAAM,mBAAqB,KAAM,CAC5C,MAAO8b,OAAQ,GAAGD,MAAMz+B,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO5B,EAAE,GAAGS,OAAO,KAAK,KAErH,IAAIT,EAAI6+B,IAAIra,MAAM,mBAAqB,KAAM,MAAO8b,MAAOpB,SAAU,GAAGmB,KACxE,KAAIrgC,EAAI6+B,IAAIra,MAAM,wBAA0B,KAAM,CACjD,MAAOqF,KAAM,EAAI,IAAMmY,cAAcv7B,KAAMo4B,KAAMhV,KAAOqV,SAAU,GAAGrV,KAAQ,IAAMiJ,KAAK,IAAI9yB,EAAE,GAAGS,QAElG,IAAIT,EAAI6+B,IAAIra,MAAM,eAAiB,KAAM,MAAOwd,eAAcv7B,KAAKo4B,IAAIj9B,QAAQ,SAAS,IAAIioB,IAC5F,KAAI7pB,EAAI6+B,IAAIra,MAAM,8BAAgC,KAAM,CACvDtkB,EAAIk6B,QAAQ4H,cAAcv7B,KAAMo4B,IAAIj9B,QAAQ,SAAS,IAAKioB,KAC1D2X,IAAK,CACL,OAAOpH,SAAQA,QAAQyE,IAAIj9B,QAAQ,MAAM,KAAKA,QAAQ,QAAQ,SAAS+B,GAAG,MAAO69B,IAAGthC,EAAEO,OAAOP,EAAEshC,MAAM79B,IAAI,IAAI,IAAI,MAElH,GAAGk7B,IAAIra,MAAMuc,SAAW,KAAM,CAC7B7gC,EAAI8hC,cAAcv7B,KAAM,aAAcojB,IACtC,OAAO,IAAM3pB,EAAE+5B,OAAO,EAAE,GAAK,KAAO/5B,EAAE+5B,OAAO,EAAG,GAAK,IAAM/5B,EAAE+5B,OAAO,GAErE,GAAIyH,IAAK,EACT,KAAI1hC,EAAI6+B,IAAIra,MAAM,kCAAoC,KAAM,CAC3Dgd,GAAKjuB,KAAKC,IAAIxT,EAAE,GAAGS,OAAO,EAC1BghC,IAAK5F,KAAKwE,KAAM9sB,KAAKsnB,IAAI,GAAG2G,IAAI,EAAG,MACnCthC,GAAI,GAAKogC,IACToB,IAAKvC,UAAU,IAAKn/B,EAAE,GAAIyhC,GAAG,GAC7B,IAAGC,GAAGA,GAAGjhC,OAAO,IAAM,IAAKihC,GAAKA,GAAGzH,OAAO,EAAEyH,GAAGjhC,OAAO,GAAK,GAC3DP,IAAKwhC,GAAK1hC,EAAE,GAAK,IAAMA,EAAE,EACzB0hC,IAAKlH,MAAMiH,GAAG,GAAGD,GACjB,IAAGE,GAAGjhC,OAAST,EAAE,GAAGS,OAAQihC,GAAKV,MAAMhhC,EAAE,GAAGi6B,OAAOj6B,EAAE,GAAGS,OAAOihC,GAAGjhC,SAAWihC,EAC7ExhC,IAAKwhC,EACL,OAAOxhC,GAER,IAAIF,EAAI6+B,IAAIra,MAAM,oCAAsC,KAAM,CAC7Dgd,GAAKjuB,KAAKC,IAAID,KAAKX,IAAI5S,EAAE,GAAGS,OAAQT,EAAE,GAAGS,QAAQ,EACjDghC,IAAK5F,KAAKwE,KAAM9sB,KAAKsnB,IAAI,GAAG2G,IAAI,EAAG,KACnC,OAAOlB,OAAQmB,GAAG,KAAKA,GAAG,GAAK,GAAK,MAAQ,KAAOA,GAAG,GAAKlH,KAAKkH,GAAG,GAAGD,IAAMxhC,EAAE,GAAK,IAAMA,EAAE,GAAKw6B,MAAMiH,GAAG,GAAGD,IAAK1O,KAAK,IAAK,EAAE0O,GAAG,EAAIxhC,EAAE,GAAGS,OAAST,EAAE,GAAGS;CAExJ,IAAIT,EAAI6+B,IAAIra,MAAM,eAAiB,KAAM,CACxCtkB,EAAI,GAAK2pB,GACT,IAAGgV,IAAIp+B,QAAUP,EAAEO,OAAQ,MAAOP,EAClC,OAAO8gC,OAAMnC,IAAI5E,OAAO,EAAE4E,IAAIp+B,OAAOP,EAAEO,SAAWP,EAEnD,IAAIF,EAAI6+B,IAAIra,MAAM,yBAA2B,KAAM,CAClDtkB,EAAI,GAAK2pB,IAAIuT,QAAQ7pB,KAAKC,IAAIxT,EAAE,GAAGS,OAAO,KAAKmB,QAAQ,YAAY,KACnE4/B,IAAKthC,EAAE2B,QAAQ,IACf,IAAI8/B,MAAO9C,IAAIh9B,QAAQ,KAAO2/B,GAAII,KAAO/C,IAAIp+B,OAASP,EAAEO,OAASkhC,IACjE,OAAOX,OAAMnC,IAAI5E,OAAO,EAAE0H,MAAQzhC,EAAI2+B,IAAI5E,OAAO4E,IAAIp+B,OAAOmhC,OAE7D,IAAI5hC,EAAI6+B,IAAIra,MAAM,yBAA2B,KAAM,CAClD,MAAOqF,KAAM,EAAI,IAAMmY,cAAcv7B,KAAMo4B,KAAMhV,KAAOqV,SAAS,GAAGrV,KAAKjoB,QAAQ,aAAa,OAAOA,QAAQ,QAAQ,SAASm+B,IAAM,MAAO,OAASA,GAAGt/B,OAAS,EAAI45B,KAAK,EAAE,EAAE0F,GAAGt/B,QAAU,IAAMs/B,KAAS,IAAM1F,KAAK,EAAEr6B,EAAE,GAAGS,QAE5N,OAAOo+B,KACN,IAAK,QAAS,GAAIl7B,GAAIu7B,SAAS,GAAGmB,KAAO,OAAO18B,KAAM,IAAM28B,KAAO38B,EAAI,EACvE,UAED,KAAM,IAAIpD,OAAM,uBAAyBs+B,IAAM,KAEhD,MAAO,SAASM,WAAU14B,KAAMo4B,IAAKhV,KACpC,OAAQA,IAAI,KAAOA,IAAMmY,cAAcv7B,KAAMo4B,IAAKhV,KAAOwX,cAAc56B,KAAMo4B,IAAKhV,QAEnF,SAASoY,WAAUpD,KAClB,GAAIj0B,OACJ,IAAIs3B,QAAS,MAAOjB,EACpB,KAAI,GAAI3gC,GAAI,EAAGo3B,EAAI,EAAGp3B,EAAIu+B,IAAIp+B,SAAUH,EAAG,OAAQ2gC,GAAGpC,IAAIr9B,WAAWlB,IACpE,IAAK,IACJ4hC,QAAUA,MAAQ,MACnB,KAAK,IAAI,IAAK,IAAI,IAAK,MACpB5hC,CAAG,MACN,KAAK,IACJsK,IAAIA,IAAInK,QAAUo+B,IAAI5E,OAAOvC,EAAEp3B,EAAEo3B,EACjCA,GAAIp3B,EAAE,EAERsK,IAAIA,IAAInK,QAAUo+B,IAAI5E,OAAOvC,EAC7B,IAAGwK,SAAW,KAAM,KAAM,IAAI3hC,OAAM,WAAas+B,IAAM,yBACvD,OAAOj0B,KAERsvB,IAAIiI,OAASF,SACb,IAAIG,SAAU,eACd,SAASC,UAASxD,IAAKpH,EAAG/F,KAAM4Q,MAC/B,GAAI13B,QAAU1K,EAAI,GAAII,EAAI,EAAGgS,EAAI,GAAIiwB,IAAI,IAAKlT,EAAGmT,GAAI9K,EAAGuJ,EACxD,IAAIwB,IAAG,GAEP,OAAMniC,EAAIu+B,IAAIp+B,OAAQ,CACrB,OAAQ6R,EAAIusB,IAAIv+B,IACf,IAAK,IACJ,IAAIy6B,UAAU8D,IAAKv+B,GAAI,KAAM,IAAIC,OAAM,0BAA4B+R,EAAI,OAAQusB,IAC/Ej0B,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAE,UAAYn3B,IAAG,CAAG,MAC/C,KAAK,IACJ,IAAIJ,EAAE,IAAI+gC,GAAGpC,IAAIr9B,aAAalB,MAAQ,IAAMA,EAAIu+B,IAAIp+B,QAASP,GAAK4B,OAAOC,aAAak/B,GACtFr2B,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEv3B,KAAMI,CAAG,MACtC,KAAK,KAAM,GAAI61B,GAAI0I,MAAMv+B,GAAIR,EAAKq2B,IAAM,KAAOA,IAAM,IAAOA,EAAI,GAC/DvrB,KAAIA,IAAInK,SAAWX,EAAEA,EAAG23B,EAAEtB,KAAM71B,CAAG,MACpC,KAAK,IAAKsK,IAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAE,IAAMn3B,IAAG,CAAG,MAClD,KAAK,IACJsK,IAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEA,KAAMn3B,CAAG,MACtC,KAAK,IAAK,IAAK,IACd,GAAGu+B,IAAIv+B,EAAE,KAAO,KAAOu+B,IAAIv+B,EAAE,KAAO,IAAK,CACnC,GAAGkiC,IAAI,KAAM,CAAEA,GAAGvE,gBAAgBxG,EAAG/F,KAAMmN,IAAIv+B,EAAE,KAAO,IAAM,IAAGkiC,IAAI,KAAM,MAAO,GACvF53B,IAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEoH,IAAI5E,OAAO35B,EAAE,GAAKiiC,KAAMjwB,CAAGhS,IAAG,CAAG,OAG/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtDgS,EAAIA,EAAE9C,aAEP,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAChE,GAAGioB,EAAI,EAAG,MAAO,EACjB,IAAG+K,IAAI,KAAM,CAAEA,GAAGvE,gBAAgBxG,EAAG/F,KAAO,IAAG8Q,IAAI,KAAM,MAAO,GAChEtiC,EAAIoS,CAAG,SAAQhS,EAAEu+B,IAAIp+B,QAAUo+B,IAAIv+B,GAAGkP,gBAAkB8C,EAAGpS,GAAGoS,CAC9D,IAAGA,IAAM,KAAOiwB,IAAI/yB,gBAAkB,IAAK8C,EAAI,GAC/C,IAAGA,IAAM,IAAKA,EAAImwB,EAClB73B,KAAIA,IAAInK,SAAWX,EAAEwS,EAAGmlB,EAAEv3B,EAAIqiC,KAAMjwB,CAAG,MACxC,KAAK,IACJ+c,GAAGvvB,EAAEwS,EAAGmlB,EAAE,IACV,IAAG+K,IAAI,KAAMA,GAAGvE,gBAAgBxG,EAAG/F,KAC/B,IAAGmN,IAAI5E,OAAO35B,EAAG,KAAO,MAAO,CAAE,GAAGkiC,IAAI,KAAMnT,EAAEoI,EAAI+K,GAAGlE,GAAK,GAAK,IAAM,GAAKjP,GAAEvvB,EAAI,GAAK2iC,IAAG,GAAIniC,IAAG,MAC5F,IAAGu+B,IAAI5E,OAAO35B,EAAE,KAAO,QAAS,CAAE,GAAGkiC,IAAI,KAAMnT,EAAEoI,EAAI+K,GAAGlE,GAAK,GAAK,KAAO,IAAMjP,GAAEvvB,EAAI,GAAKQ,IAAG,CAAGmiC,IAAG,QACvG,CAAEpT,EAAEvvB,EAAI,MAAOQ,EACpB,GAAGkiC,IAAI,MAAQnT,EAAEvvB,IAAM,IAAK,MAAO,EACnC8K,KAAIA,IAAInK,QAAU4uB,CAAGkT,KAAMjwB,CAAG,MAC/B,KAAK,IACJpS,EAAIoS,CACJ,OAAMusB,IAAIv+B,OAAS,KAAOA,EAAIu+B,IAAIp+B,OAAQP,GAAK2+B,IAAIv+B,EACnD,IAAGJ,EAAE+5B,QAAQ,KAAO,IAAK,KAAM,4BAA8B/5B,EAAI,GACjE,IAAGA,EAAEskB,MAAM4d,SAAU,CACpB,GAAGI,IAAI,KAAM,CAAEA,GAAGvE,gBAAgBxG,EAAG/F,KAAO,IAAG8Q,IAAI,KAAM,MAAO,GAChE53B,IAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEv3B,EAAEsP,mBACxB,CAAEtP,EAAE,GACX,KAED,KAAK,IACJ,GAAGsiC,IAAM,KAAM,CACdtiC,EAAIoS,CAAG,QAAOA,EAAEusB,MAAMv+B,MAAQ,IAAKJ,GAAKoS,CACxC1H,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEv3B,EAAI,OAGlC,IAAK,IAAK,IAAK,IACdA,EAAIoS,CAAG,OAAM,YAAYzQ,QAAQyQ,EAAEusB,MAAMv+B,KAAO,GAAKgS,GAAG,MAAQusB,IAAIv+B,EAAE,IAAM,KAAO,KAAKuB,QAAQg9B,IAAIv+B,EAAE,KAAK,EAAGJ,GAAKoS,CACnH1H,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEv3B,EAAI,MACjC,KAAK,IACJA,EAAIoS,CAAG,OAAMusB,MAAMv+B,KAAOgS,EAAGpS,GAAGoS,CAChC+c,IAAGvvB,EAAEwS,EAAGmlB,EAAEv3B,EAAI0K,KAAIA,IAAInK,QAAU4uB,CAAGkT,KAAMjwB,CAAG,MAC7C,KAAK,MAAOhS,CAAG,IAAGu+B,IAAIv+B,IAAM,KAAOu+B,IAAIv+B,IAAM,MAAOA,CAAG,MACvD,KAAK,IAAK,IAAK,IAAKsK,IAAIA,IAAInK,SAAWX,EAAGwiC,OAAO,EAAE,IAAIhwB,EAAImlB,EAAEnlB,KAAMhS,CAAG,MACtE,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpFJ,EAAIoS,CAAG,OAAM,aAAazQ,QAAQg9B,MAAMv+B,KAAO,EAAGJ,GAAG2+B,IAAIv+B,EACzDsK,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEv3B,EAAI,MACjC,KAAK,IAAK0K,IAAIA,IAAInK,SAAWX,EAAEwS,EAAGmlB,EAAEnlB,KAAMhS,CAAG,MAC7C,SACC,GAAG,uCAAuCuB,QAAQyQ,MAAQ,EAAG,KAAM,IAAI/R,OAAM,0BAA4B+R,EAAI,OAASusB,IACtHj0B,KAAIA,IAAInK,SAAWX,EAAE,IAAK23B,EAAEnlB,KAAMhS,CAAG,QAGxC,GAAIoiC,IAAK,EAAG5D,IAAM,EAAG6D,GACrB,KAAIriC,EAAEsK,IAAInK,OAAO,EAAG8hC,IAAI,IAAKjiC,GAAK,IAAKA,EAAG,CACzC,OAAOsK,IAAItK,GAAGR,GACb,IAAK,IAAK,IAAK,IAAK8K,IAAItK,GAAGR,EAAI2iC,EAAIF,KAAI,GAAK,IAAGG,GAAK,EAAGA,GAAK,CAAG,MAC/D,KAAK,IACJ,GAAIC,IAAI/3B,IAAItK,GAAGm3B,EAAEjT,MAAM,SAAWsa,IAAIvrB,KAAKX,IAAIksB,IAAI6D,IAAI,GAAGliC,OAAO,EACjE,IAAGiiC,GAAK,EAAGA,GAAK,CAEjB,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAKH,IAAI33B,IAAItK,GAAGR,CAAG,MACtD,KAAK,IAAK,GAAGyiC,MAAQ,IAAK,CAAE33B,IAAItK,GAAGR,EAAI,GAAK,IAAG4iC,GAAK,EAAGA,GAAK,EAAK,KACjE,KAAK,IAAK,GAAG93B,IAAItK,GAAGm3B,IAAM,MACzB,KACD,KAAK,IACJ,GAAGiL,GAAK,GAAK93B,IAAItK,GAAGm3B,EAAEjT,MAAM,QAASke,GAAK,CAC1C,IAAGA,GAAK,GAAK93B,IAAItK,GAAGm3B,EAAEjT,MAAM,QAASke,GAAK,CAC1C,IAAGA,GAAK,GAAK93B,IAAItK,GAAGm3B,EAAEjT,MAAM,QAASke,GAAK,GAG7C,OAAOA,IACN,IAAK,GAAG,KACR,KAAK,GACJ,GAAGF,GAAGriC,GAAK,GAAK,CAAEqiC,GAAGriC,EAAI,IAAKqiC,GAAGhE,EACjC,GAAGgE,GAAGhE,GAAM,GAAI,CAAEgE,GAAGhE,EAAI,IAAKgE,GAAGjE,EACjC,GAAGiE,GAAGjE,GAAM,GAAI,CAAEiE,GAAGjE,EAAI,IAAKiE,GAAGlE,EACjC,KACD,KAAK,GACJ,GAAGkE,GAAGriC,GAAK,GAAK,CAAEqiC,GAAGriC,EAAI,IAAKqiC,GAAGhE,EACjC,GAAGgE,GAAGhE,GAAM,GAAI,CAAEgE,GAAGhE,EAAI,IAAKgE,GAAGjE,EACjC,MAGF,GAAIqE,MAAO,GAAIC,EACf,KAAIviC,EAAE,EAAGA,EAAIsK,IAAInK,SAAUH,EAAG,CAC7B,OAAOsK,IAAItK,GAAGR,GACb,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACxC,KAAK,IAAK8K,IAAItK,GAAKkJ,SAAW,MAC9B,KAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9FoB,IAAItK,GAAGm3B,EAAImH,WAAWh0B,IAAItK,GAAGR,EAAE0B,WAAW,GAAIoJ,IAAItK,GAAGm3B,EAAG+K,GAAI1D,IAC5Dl0B,KAAItK,GAAGR,EAAI,GAAK,MACjB,KAAK,IAAK,IAAK,IAAK,IAAK,IACxB+iC,GAAKviC,EAAE,CACP,OAAMsK,IAAIi4B,KAAO,QACfvwB,EAAE1H,IAAIi4B,IAAI/iC,KAAO,KAAOwS,IAAM,MAC9BA,IAAM,KAAOA,IAAM,MAAQ1H,IAAIi4B,GAAG,IAAM,OAASj4B,IAAIi4B,GAAG,GAAG/iC,IAAM,KAAO8K,IAAIi4B,GAAG,GAAG/iC,IAAM,KAAO8K,IAAIi4B,GAAG,GAAGpL,IAAM,MAChH7sB,IAAItK,GAAGR,IAAM,MAAQwS,IAAM,KAAOA,IAAM,KAAOA,IAAM,MACrDA,IAAM,MAAQ1H,IAAIi4B,IAAIpL,IAAM,KAAO,KAAK51B,QAAQ+I,IAAIi4B,IAAIpL,IAAM,GAAK7sB,IAAIi4B,IAAIpL,IAAM,KAAO7sB,IAAIi4B,GAAG,IAAM,MAAQj4B,IAAIi4B,GAAG,GAAG/iC,GAAK,MAC1H,CACF8K,IAAItK,GAAGm3B,GAAK7sB,IAAIi4B,IAAIpL,CACpB7sB,KAAIi4B,IAAMr5B,YAAaq5B,GAExBD,MAAQh4B,IAAItK,GAAGm3B,CACfn3B,GAAIuiC,GAAG,CAAG,MACX,KAAK,IAAKj4B,IAAItK,GAAGR,EAAI,GAAK8K,KAAItK,GAAGm3B,EAAIqG,YAAYrG,EAAE/F,KAAO,QAG5D,GAAIoR,IAAK,GAAIC,IAAKC,IAClB,IAAGJ,KAAKniC,OAAS,EAAG,CACnBsiC,IAAOtL,EAAE,GAAGmL,KAAKphC,WAAW,KAAO,IAAMi2B,EAAIA,CAC7CuL,MAAO7D,UAAUyD,KAAKphC,WAAW,KAAO,GAAK,IAAM,IAAKohC,KAAMG,IAC9DF,IAAGG,KAAKviC,OAAO,CACf,IAAIwiC,OAAQr4B,IAAInK,MAChB,KAAIH,EAAE,EAAGA,EAAIsK,IAAInK,SAAUH,EAAG,GAAGsK,IAAItK,IAAM,MAAQsK,IAAItK,GAAGm3B,EAAE51B,QAAQ,MAAQ,EAAG,CAAEohC,MAAQ3iC,CAAG,OAC5F,GAAI4iC,OAAMt4B,IAAInK,MACd,IAAGwiC,QAAUr4B,IAAInK,QAAUuiC,KAAKnhC,QAAQ,QAAU,EAAG,CACpD,IAAIvB,EAAEsK,IAAInK,OAAO,EAAGH,GAAI,IAAIA,EAAG,CAC9B,GAAGsK,IAAItK,IAAM,MAAQ,MAAMuB,QAAQ+I,IAAItK,GAAGR,MAAQ,EAAG,QACrD,IAAG+iC,IAAIj4B,IAAItK,GAAGm3B,EAAEh3B,OAAO,EAAG,CAAEoiC,IAAMj4B,IAAItK,GAAGm3B,EAAEh3B,MAAQmK,KAAItK,GAAGm3B,EAAIuL,KAAK/I,OAAO4I,GAAG,EAAGj4B,IAAItK,GAAGm3B,EAAEh3B,YACpF,IAAGoiC,GAAK,EAAGj4B,IAAItK,GAAGm3B,EAAI,OACtB,CAAE7sB,IAAItK,GAAGm3B,EAAIuL,KAAK/I,OAAO,EAAG4I,GAAG,EAAIA,KAAM,EAC9Cj4B,IAAItK,GAAGR,EAAI,GACXojC,OAAQ5iC,EAET,GAAGuiC,IAAI,GAAKK,MAAMt4B,IAAInK,OAAQmK,IAAIs4B,OAAOzL,EAAIuL,KAAK/I,OAAO,EAAE4I,GAAG,GAAKj4B,IAAIs4B,OAAOzL,MAE1E,IAAGwL,QAAUr4B,IAAInK,QAAUuiC,KAAKnhC,QAAQ,QAAU,EAAG,CACzDghC,GAAKG,KAAKnhC,QAAQ,KAAK,CACvB,KAAIvB,EAAE2iC,MAAO3iC,GAAI,IAAKA,EAAG,CACxB,GAAGsK,IAAItK,IAAM,MAAQ,MAAMuB,QAAQ+I,IAAItK,GAAGR,MAAQ,EAAG,QACrD43B,GAAE9sB,IAAItK,GAAGm3B,EAAE51B,QAAQ,MAAM,GAAGvB,IAAI2iC,MAAMr4B,IAAItK,GAAGm3B,EAAE51B,QAAQ,KAAK,EAAE+I,IAAItK,GAAGm3B,EAAEh3B,OAAO,CAC9EqiC,IAAKl4B,IAAItK,GAAGm3B,EAAEwC,OAAOvC,EAAE,EACvB,MAAMA,GAAG,IAAKA,EAAG,CAChB,GAAGmL,IAAI,IAAMj4B,IAAItK,GAAGm3B,EAAEC,KAAO,KAAO9sB,IAAItK,GAAGm3B,EAAEC,KAAO,KAAMoL,GAAKE,KAAKH,MAAQC,GAE7El4B,IAAItK,GAAGm3B,EAAIqL,EACXl4B,KAAItK,GAAGR,EAAI,GACXojC,OAAQ5iC,EAET,GAAGuiC,IAAI,GAAKK,MAAMt4B,IAAInK,OAAQmK,IAAIs4B,OAAOzL,EAAIuL,KAAK/I,OAAO,EAAE4I,GAAG,GAAKj4B,IAAIs4B,OAAOzL,CAC9EoL,IAAKG,KAAKnhC,QAAQ,KAAK,CACvB,KAAIvB,EAAE2iC,MAAO3iC,EAAEsK,IAAInK,SAAUH,EAAG,CAC/B,GAAGsK,IAAItK,IAAM,MAAQ,MAAMuB,QAAQ+I,IAAItK,GAAGR,MAAQ,GAAKQ,IAAM2iC,MAAQ,QACrEvL,GAAE9sB,IAAItK,GAAGm3B,EAAE51B,QAAQ,MAAM,GAAGvB,IAAI2iC,MAAMr4B,IAAItK,GAAGm3B,EAAE51B,QAAQ,KAAK,EAAE,CAC9DihC,IAAKl4B,IAAItK,GAAGm3B,EAAEwC,OAAO,EAAEvC,EACvB,MAAMA,EAAE9sB,IAAItK,GAAGm3B,EAAEh3B,SAAUi3B,EAAG,CAC7B,GAAGmL,GAAGG,KAAKviC,OAAQqiC,IAAME,KAAKH,MAE/Bj4B,IAAItK,GAAGm3B,EAAIqL,EACXl4B,KAAItK,GAAGR,EAAI,GACXojC,OAAQ5iC,IAIX,IAAIA,EAAE,EAAGA,EAAEsK,IAAInK,SAAUH,EAAG,GAAGsK,IAAItK,IAAM,MAAQ,MAAMuB,QAAQ+I,IAAItK,GAAGR,IAAI,EAAG,CAC5EijC,IAAOT,KAAM,GAAK7K,EAAI,GAAKn3B,EAAE,GAAKsK,IAAItK,EAAE,GAAGm3B,IAAM,KAAOA,EAAEA,CAC1D7sB,KAAItK,GAAGm3B,EAAI0H,UAAUv0B,IAAItK,GAAGR,EAAG8K,IAAItK,GAAGm3B,EAAGsL,IACzCn4B,KAAItK,GAAGR,EAAI,IAEZ,GAAIqjC,QAAS,EACb,KAAI7iC,EAAE,EAAGA,IAAMsK,IAAInK,SAAUH,EAAG,GAAGsK,IAAItK,IAAM,KAAM6iC,QAAUv4B,IAAItK,GAAGm3B,CACpE,OAAO0L,QAERjJ,IAAIkJ,MAAQf,QACZ,IAAIgB,SAAU,SACd,IAAIC,UAAW,2BACf,SAASC,SAAQ9L,EAAGgJ,IACnB,GAAGA,IAAM,KAAM,MAAO,MACtB,IAAI+C,QAASC,WAAWhD,GAAG,GAC3B,QAAOA,GAAG,IACT,IAAK,IAAM,GAAGhJ,GAAK+L,OAAQ,MAAO,KAAM,MACxC,KAAK,IAAM,GAAG/L,EAAK+L,OAAQ,MAAO,KAAM,MACxC,KAAK,IAAM,GAAG/L,EAAK+L,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAG/L,GAAK+L,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAG/L,GAAK+L,OAAQ,MAAO,KAAM,MACxC,KAAK,KAAM,GAAG/L,GAAK+L,OAAQ,MAAO,KAAM,OAEzC,MAAO,OAER,QAASE,YAAWjkC,EAAGg4B,GACtB,GAAIoH,KAAMoD,UAAUxiC,EACpB,IAAIif,GAAImgB,IAAIp+B,OAAQkjC,IAAM9E,IAAIngB,EAAE,GAAG7c,QAAQ,IAC3C,IAAG6c,EAAE,GAAKilB,KAAK,IAAKjlB,CACpB,IAAGmgB,IAAIp+B,OAAS,EAAG,KAAM,iCAAmCo+B,IAAM,GAClE,UAAUpH,KAAM,SAAU,OAAQ,EAAGoH,IAAIp+B,SAAW,GAAKkjC,KAAK,EAAE9E,IAAIA,IAAIp+B,OAAO,GAAG,IAClF,QAAOo+B,IAAIp+B,QACV,IAAK,GAAGo+B,IAAM8E,KAAK,GAAK,UAAW,UAAW,UAAW9E,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MAClG,KAAK,GAAGA,IAAM8E,KAAK,GAAK9E,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAIA,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MACzF,KAAK,GAAGA,IAAM8E,KAAK,GAAK9E,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAIA,IAAI,KAAOA,IAAI,GAAIA,IAAI,GAAIA,IAAI,GAAI,IAAM,MACzF,KAAK,GAAG,MAET,GAAI4C,IAAKhK,EAAI,EAAIoH,IAAI,GAAKpH,EAAI,EAAIoH,IAAI,GAAKA,IAAI,EAC/C,IAAGA,IAAI,GAAGh9B,QAAQ,QAAU,GAAKg9B,IAAI,GAAGh9B,QAAQ,QAAU,EAAG,OAAQ6c,EAAG+iB,GACxE,IAAG5C,IAAI,GAAGra,MAAM6e,UAAY,MAAQxE,IAAI,GAAGra,MAAM6e,UAAY,KAAM,CAClE,GAAIO,IAAK/E,IAAI,GAAGra,MAAM8e,SACtB,IAAIO,IAAKhF,IAAI,GAAGra,MAAM8e,SACtB,OAAOC,SAAQ9L,EAAGmM,KAAOllB,EAAGmgB,IAAI,IAAM0E,QAAQ9L,EAAGoM,KAAOnlB,EAAGmgB,IAAI,KAAOngB,EAAGmgB,IAAI+E,IAAM,MAAQC,IAAM,KAAO,EAAI,IAE7G,OAAQnlB,EAAG+iB,IAEZ,QAASqC,QAAOjF,IAAIpH,EAAEv3B,GACrB+6B,QAAQ/6B,GAAK,KAAOA,EAAKA,KACzB,IAAIq/B,MAAO,EACX,cAAcV,MACb,IAAK,SAAUU,KAAOV,GAAK,MAC3B,KAAK,SAAUU,MAAQr/B,EAAEqD,OAAS,KAAOrD,EAAEqD,MAAQ23B,WAAW2D,IAAM,OAErE,GAAG9D,UAAUwE,KAAK,GAAI,MAAOzB,aAAYrG,EAAGv3B,EAC5C,IAAIT,GAAIikC,WAAWnE,KAAM9H,EACzB,IAAGsD,UAAUt7B,EAAE,IAAK,MAAOq+B,aAAYrG,EAAGv3B,EAC1C,IAAGu3B,IAAM,KAAMA,EAAI,WAAa,IAAGA,IAAM,MAAOA,EAAI,YAC/C,IAAGA,IAAM,IAAMA,GAAK,KAAM,MAAO,EACtC,OAAO4K,UAAS5iC,EAAE,GAAIg4B,EAAGv3B,EAAGT,EAAE,IAE/By6B,IAAI6J,OAAS7I,SACbhB,KAAItyB,KAAO,QAASo8B,YAAWnF,IAAKa,KAAOxE,UAAUwE,KAAOb,IAC5D3E,KAAI4J,OAASA,MACb5J,KAAI+J,UAAY,QAASA,aAAc,MAAO/I,WAC9ChB,KAAIgK,WAAa,QAASA,YAAWC,KAAO,IAAI,GAAI7jC,GAAE,EAAGA,GAAG,MAAUA,EAAG,GAAG6jC,IAAI7jC,KAAOkJ,UAAW0wB,IAAItyB,KAAKu8B,IAAI7jC,GAAIA,IAEnH65B,UAASD,IACT,SAASkK,OAAMzgC,GAAK,MAAOA,KAAM6F,WAAa7F,IAAM,KAEpD,QAAS0gC,MAAKnkC,GAAK,MAAOqU,QAAO8vB,KAAKnkC,GAEtC,QAASokC,WAAUvmB,IAAKwmB,KACvB,GAAIrkC,MAAQskC,EAAIH,KAAKtmB,IACrB,KAAI,GAAIzd,GAAI,EAAGA,IAAMkkC,EAAE/jC,SAAUH,EAAGJ,EAAE6d,IAAIymB,EAAElkC,IAAIikC,MAAQC,EAAElkC,EAC1D,OAAOJ,GAGR,QAASukC,OAAM1mB,KACd,GAAI7d,MAAQskC,EAAIH,KAAKtmB,IACrB,KAAI,GAAIzd,GAAI,EAAGA,IAAMkkC,EAAE/jC,SAAUH,EAAGJ,EAAE6d,IAAIymB,EAAElkC,KAAOkkC,EAAElkC,EACrD,OAAOJ,GAGR,QAASwkC,WAAU3mB,KAClB,GAAI7d,MAAQskC,EAAIH,KAAKtmB,IACrB,KAAI,GAAIzd,GAAI,EAAGA,IAAMkkC,EAAE/jC,SAAUH,EAAGJ,EAAE6d,IAAIymB,EAAElkC,KAAOkgC,SAASgE,EAAElkC,GAAG,GACjE,OAAOJ,GAGR,QAASykC,WAAU5mB,KAClB,GAAI7d,MAAQskC,EAAIH,KAAKtmB,IACrB,KAAI,GAAIzd,GAAI,EAAGA,IAAMkkC,EAAE/jC,SAAUH,EAAG,CACnC,GAAGJ,EAAE6d,IAAIymB,EAAElkC,MAAQ,KAAMJ,EAAE6d,IAAIymB,EAAElkC,OACjCJ,GAAE6d,IAAIymB,EAAElkC,KAAKgO,KAAKk2B,EAAElkC,IAErB,MAAOJ,GAIR,QAAS0kC,SAAQnN,EAAGgH,UACnB,GAAGA,SAAUhH,GAAG,IAChB,IAAIoN,OAAQx/B,KAAKy/B,MAAMrN,EACvB,QAAQoN,MAAQ,aAAkB,GAAK,GAAK,GAAK,KAGlD,QAASE,QAAOC,KACf,GAAI9kC,GAAI,EACR,KAAI,GAAII,GAAI,EAAGA,GAAK0kC,IAAIvkC,SAAUH,EAAGJ,GAAK4B,OAAOC,aAAaijC,IAAI1kC,GAClE,OAAOJ,GAGR,GAAI+kC,eAAkB77B,UAAW,WACjC,SAAS87B,SAAQhhC,MAChB,IAAIA,KAAM,MAAO,KACjB,IAAGA,KAAK8G,KAAKivB,QAAQ,KAAO,OAAQ,CACnC,GAAG/1B,KAAKA,KAAM,MAAO61B,YAAW71B,KAAKA,KACrC,IAAGA,KAAKiH,cAAgB85B,QAAS,MAAO/gC,MAAKiH,cAC7C,IAAGjH,KAAKkG,OAASlG,KAAKkG,MAAM3H,WAAY,MAAO0P,OAAM3P,UAAUoH,MAAMpJ,KAAK0D,KAAKkG,MAAM3H,kBAC/E,CACN,GAAGyB,KAAKA,KAAM,MAAOA,MAAK8G,KAAKivB,QAAQ,KAAO,OAASD,UAAU91B,KAAKA,MAAQ61B,WAAW71B,KAAKA,KAC9F,IAAGA,KAAKiH,cAAgB85B,QAAS,MAAOjL,WAAU91B,KAAKiH,eAAegI,SAAS,UAC/E,IAAGjP,KAAKuG,SAAU,MAAOuvB,WAAU91B,KAAKuG,WACxC,IAAGvG,KAAKkG,OAASlG,KAAKkG,MAAM3H,WAAY,MAAOu3B,WAAU+K,OAAO5yB,MAAM3P,UAAUoH,MAAMpJ,KAAK0D,KAAKkG,MAAM3H,aAAa,KAEpH,MAAO,MAGR,QAAS0iC,gBAAez1B,IAAK9G,MAC5B,GAAInJ,GAAImJ,IAAM,IAAG8G,IAAIhI,MAAMjI,GAAI,MAAOiQ,KAAIhI,MAAMjI,EAChDA,GAAImJ,KAAK4G,aAAe,IAAGE,IAAIhI,MAAMjI,GAAI,MAAOiQ,KAAIhI,MAAMjI,EAC1DA,GAAIA,EAAEmC,QAAQ,MAAM,KAAO,IAAG8N,IAAIhI,MAAMjI,GAAI,MAAOiQ,KAAIhI,MAAMjI,EAC7D,OAAO,MAGR,QAAS2lC,YAAW11B,IAAK9G,MACxB,GAAI1I,GAAIilC,eAAez1B,IAAK9G,KAC5B,IAAG1I,GAAK,KAAM,KAAM,IAAIK,OAAM,oBAAsBqI,KAAO,UAC3D,OAAO1I,GAGR,QAASmlC,YAAW31B,IAAK9G,KAAM08B,MAC9B,IAAIA,KAAM,MAAOJ,SAAQE,WAAW11B,IAAK9G,MACzC,KAAIA,KAAM,MAAO,KACjB,KAAM,MAAOy8B,YAAW31B,IAAK9G,MAAS,MAAMxJ,GAAK,MAAO,OAGzD,GAAImmC,KAAKC,KACT,UAAU3lC,SAAU,YAAa2lC,MAAQ3lC,KACzC,UAAWR,WAAY,YAAa,CACnC,SAAWC,UAAW,aAAeA,OAAOD,QAAS,CACpD,GAAG4lC,eAAkBO,SAAU,YAAaA,MAAQnlC,QAAQ,KAAK,MACjE,UAAUmlC,SAAU,YAAaA,MAAQnlC,QAAQ,OAAO,OAAOR,KAC/D0lC,KAAMllC,QAAQ,IAAI,MAGpB,GAAIolC,WAAU,yBACd,IAAIC,UAAS,UACb,IAAIC,SAAQ,QAASC,SAAW,YAChC,SAASC,aAAYC,IAAKC,WACzB,GAAIC,KACJ,IAAIC,IAAK,EAAG3zB,EAAI,CAChB,MAAM2zB,KAAOH,IAAIrlC,SAAUwlC,GAAI,IAAI3zB,EAAIwzB,IAAItkC,WAAWykC,OAAS,IAAM3zB,IAAM,IAAMA,IAAM,GAAI,KAC3F,KAAIyzB,UAAWC,EAAE,GAAKF,IAAI7L,OAAO,EAAGgM,GACpC,IAAGA,KAAOH,IAAIrlC,OAAQ,MAAOulC,EAC7B,IAAItgB,GAAIogB,IAAIthB,MAAMihB,WAAY/N,EAAE,EAAGvB,EAAE,GAAIsB,EAAE,GAAIn3B,EAAE,EAAG+uB,EAAE,GAAI4R,GAAG,EAC7D,IAAGvb,EAAG,IAAIplB,EAAI,EAAGA,GAAKolB,EAAEjlB,SAAUH,EAAG,CACpC2gC,GAAKvb,EAAEplB,EACP,KAAIgS,EAAE,EAAGA,GAAK2uB,GAAGxgC,SAAU6R,EAAG,GAAG2uB,GAAGz/B,WAAW8Q,KAAO,GAAI,KAC1D+c,GAAI4R,GAAGhH,OAAO,EAAE3nB,EAAImlB,GAAIwJ,GAAG30B,UAAUgG,EAAE,EAAG2uB,GAAGxgC,OAAO,EACpD,KAAIi3B,EAAE,EAAEA,GAAGrI,EAAE5uB,SAASi3B,EAAG,GAAGrI,EAAE7tB,WAAWk2B,KAAO,GAAI,KACpD,IAAGA,IAAIrI,EAAE5uB,OAAQulC,EAAE3W,GAAKoI,MACnBuO,IAAGtO,IAAI,GAAKrI,EAAE4K,OAAO,EAAE,KAAK,QAAQ,QAAQ,IAAI5K,EAAE4K,OAAOvC,EAAE,IAAMD,EAEvE,MAAOuO,GAER,QAASE,UAASviC,GAAK,MAAOA,GAAE/B,QAAQgkC,SAAU,OAElD,GAAIO,YACHC,SAAU,IACVC,SAAU,IACVC,OAAQ,IACRC,OAAQ,IACRC,QAAS,IAEV,IAAIC,WAAYhC,MAAM0B,UACtB,IAAIO,SAAU,SAASC,MAAM,GAG7B,IAAIC,UAAW,YAAaC,UAAY,mBACxC,SAASC,aAAYhd,MACpB,GAAI7pB,GAAI6pB,KAAO,EACf,OAAO7pB,GAAE2B,QAAQglC,SAAU,SAAS7G,IAAM,MAAOoG,WAAUpG,MAAQn+B,QAAQilC,UAAU,SAASnhB,EAAEpT,GAAI,MAAOxQ,QAAOC,aAAay+B,SAASluB,EAAE,OAE3I,GAAIy0B,UAAS,WAAYC,SAAW,+BACpC,SAASC,WAAUnd,MAClB,GAAI7pB,GAAI6pB,KAAO,EACf,OAAO7pB,GAAE2B,QAAQmlC,SAAU,SAASnjC,GAAK,MAAO6iC,WAAU7iC,KAAOhC,QAAQolC,SAAS,SAAS/mC,GAAK,MAAO,MAAQ,MAAMA,EAAEuB,WAAW,GAAG2R,SAAS,KAAK8mB,QAAQ,GAAK,MAGjK,QAASiN,cAAa7wB,MAAOyvB,KAC5B,OAAOzvB,OACN,IAAK,IAAK,IAAK,OAAQ,IAAK,OAAQ,MAAO,KAE3C,SAAS,MAAO,QAIlB,GAAI8wB,UAAW,QAASC,WAAUC,MACjC,GAAIz8B,KAAM,GAAItK,EAAI,EAAGgS,EAAI,EAAGgoB,EAAI,EAAGl7B,EAAI,EAAGK,EAAI,EAAG02B,EAAI,CACrD,OAAO71B,EAAI+mC,KAAK5mC,OAAQ,CACvB6R,EAAI+0B,KAAK7lC,WAAWlB,IACpB,IAAIgS,EAAI,IAAK,CAAE1H,KAAO9I,OAAOC,aAAauQ,EAAI,UAC9CgoB,EAAI+M,KAAK7lC,WAAWlB,IACpB,IAAIgS,EAAE,KAAOA,EAAE,IAAK,CAAE1H,KAAO9I,OAAOC,cAAeuQ,EAAI,KAAO,EAAMgoB,EAAI,GAAM,UAC9El7B,EAAIioC,KAAK7lC,WAAWlB,IACpB,IAAIgS,EAAI,IAAK,CAAE1H,KAAO9I,OAAOC,cAAeuQ,EAAI,KAAO,IAAQgoB,EAAI,KAAO,EAAMl7B,EAAI,GAAM,UAC1FK,EAAI4nC,KAAK7lC,WAAWlB,IACpB61B,KAAO7jB,EAAI,IAAM,IAAQgoB,EAAI,KAAO,IAAQl7B,EAAI,KAAO,EAAMK,EAAI,IAAK,KACtEmL,MAAO9I,OAAOC,aAAa,OAAWo0B,IAAI,GAAI,MAC9CvrB,MAAO9I,OAAOC,aAAa,OAAUo0B,EAAE,OAExC,MAAOvrB,KAIR,IAAGq6B,QAAS,CACX,GAAIqC,WAAY,QAASA,WAAUpjC,MAClC,GAAI0G,KAAM,GAAIxB,QAAO,EAAElF,KAAKzD,QAAS01B,EAAG71B,EAAGo3B,EAAI,EAAGtkB,EAAI,EAAGm0B,GAAG,EAAGj1B,CAC/D,KAAIhS,EAAI,EAAGA,EAAI4D,KAAKzD,OAAQH,GAAGo3B,EAAG,CACjCA,EAAI,CACJ,KAAIplB,EAAEpO,KAAK1C,WAAWlB,IAAM,IAAK61B,EAAI7jB,MAChC,IAAGA,EAAI,IAAK,CAAE6jB,GAAK7jB,EAAE,IAAI,IAAIpO,KAAK1C,WAAWlB,EAAE,GAAG,GAAKo3B,GAAE,MACzD,IAAGplB,EAAI,IAAK,CAAE6jB,GAAG7jB,EAAE,IAAI,MAAMpO,KAAK1C,WAAWlB,EAAE,GAAG,IAAI,IAAI4D,KAAK1C,WAAWlB,EAAE,GAAG,GAAKo3B,GAAE,MACtF,CAAEA,EAAI,CACVvB,IAAK7jB,EAAI,GAAG,QAAQpO,KAAK1C,WAAWlB,EAAE,GAAG,IAAI,MAAM4D,KAAK1C,WAAWlB,EAAE,GAAG,IAAI,IAAI4D,KAAK1C,WAAWlB,EAAE,GAAG,GACrG61B,IAAK,KAAOoR,IAAK,OAAWpR,IAAI,GAAI,KAAOA,GAAI,OAAUA,EAAE,MAE5D,GAAGoR,KAAO,EAAG,CAAE38B,IAAIwI,KAAOm0B,GAAG,GAAK38B,KAAIwI,KAAOm0B,KAAK,CAAGA,IAAK,EAC1D38B,IAAIwI,KAAO+iB,EAAE,GAAKvrB,KAAIwI,KAAO+iB,IAAI,EAElCvrB,IAAInK,OAAS2S,CACb,OAAOxI,KAAIuI,SAAS,QAErB,IAAIq0B,QAAS,oBACb,IAAGL,SAASK,SAAWF,UAAUE,QAASL,SAAWG,SACrD,IAAIG,WAAY,QAASA,WAAUvjC,MAAQ,MAAOkF,QAAOlF,KAAM,UAAUiP,SAAS,QAClF,IAAGg0B,SAASK,SAAWC,UAAUD,QAASL,SAAWM,UAItD,GAAIC,UAAW,WACd,GAAIC,WACJ,OAAO,SAASD,UAASjoC,EAAEmoC,GAC1B,GAAI9nC,GAAIL,EAAE,IAAImoC,CACd,IAAGD,QAAQ7nC,KAAO0J,UAAW,MAAOm+B,SAAQ7nC,EAC5C,OAAQ6nC,SAAQ7nC,GAAK,GAAI+nC,QAAO,cAAcpoC,EAAE,0DAA+DA,EAAE,IAAKmoC,GAAG,OAI3H,IAAIE,SAAU,WAAa,GAAIC,YAC9B,OAAO,SAASC,UAAStF,IACxB,GAAGqF,SAASrF,MAAQl5B,UAAW,MAAOu+B,UAASrF,GAC/C,OAAQqF,UAASrF,IAAM,GAAImF,QAAO,OAASnF,GAAK,cAAgBA,GAAK,IAAK,QAE5E,IAAIuF,UAAW,mBAAoBC,SAAW,mBAC9C,SAASC,aAAYjkC,MACpB,GAAI0yB,GAAIiP,YAAY3hC,KAEpB,IAAIilB,SAAUjlB,KAAKsgB,MAAMsjB,QAAQlR,EAAEwR,cACnC,IAAGjf,QAAQ1oB,QAAUm2B,EAAEhyB,KAAM,KAAM,4BAA8BukB,QAAQ1oB,OAAS,OAASm2B,EAAEhyB,IAC7F,IAAI6P,OACJ0U,SAAQkf,QAAQ,SAAS1kC,GACxB,GAAI8zB,GAAI9zB,EAAE/B,QAAQqmC,SAAS,IAAIzjB,MAAM0jB,SACrCzzB,KAAInG,MAAMmpB,EAAEA,EAAE,GAAI33B,EAAE23B,EAAE,MAEvB,OAAOhjB,KAGR,GAAI6zB,SAAU,cACd,SAASC,UAAS9oC,EAAEmoC,GAAI,MAAO,IAAMnoC,GAAKmoC,EAAEpjB,MAAM8jB,SAAS,wBAA0B,IAAM,IAAMV,EAAI,KAAOnoC,EAAI,IAEhH,QAAS+oC,YAAW5R,GAAK,MAAOyN,MAAKzN,GAAG6R,IAAI,SAASr1B,GAAK,MAAO,IAAMA,EAAI,KAAOwjB,EAAExjB,GAAK,MAAOxC,KAAK,IACrG,QAAS83B,WAAUjpC,EAAEmoC,EAAEhR,GAAK,MAAO,IAAMn3B,GAAK2kC,MAAMxN,GAAK4R,WAAW5R,GAAK,KAAOwN,MAAMwD,IAAMA,EAAEpjB,MAAM8jB,SAAS,wBAA0B,IAAM,IAAMV,EAAI,KAAOnoC,EAAI,KAAO,IAEzK,QAASkpC,cAAarO,EAAGx6B,GAAK,IAAM,MAAOw6B,GAAEsO,cAAchnC,QAAQ,QAAQ,IAAO,MAAMxC,GAAK,GAAGU,EAAG,KAAMV,IAEzG,QAASypC,UAAS5oC,GACjB,aAAcA,IACb,IAAK,SAAU,MAAOyoC,WAAU,YAAazoC,EAC7C,KAAK,SAAU,MAAOyoC,YAAWzoC,EAAE,IAAIA,EAAE,QAAQ,QAAS6B,OAAO7B,GACjE,KAAK,UAAW,MAAOyoC,WAAU,UAAUzoC,EAAE,OAAO,SAErD,GAAGA,YAAaoF,MAAM,MAAOqjC,WAAU,cAAeC,aAAa1oC,GACnE,MAAM,IAAIM,OAAM,uBAAyBN,GAG1C,GAAI6oC,YAAa,6DACjB,IAAIC,QACHC,GAAM,mCACNC,QAAW,4BACXC,SAAY,+BACZC,GAAM,0DACNnpC,EAAK,sEACLopC,IAAO,yEACPC,GAAM,uEACNC,IAAO,4CACPC,IAAO,mCAGRR,OAAMS,MACL,4DACA,gDACA,sDACA,mDAED,SAASC,aAAYp3B,IAAKqtB,IAAKgK,KAAMC,GAAIC,IACxC,GAAGF,OAASlgC,UAAWkgC,KAAO,IAC9B,KAAIC,GAAIA,GAAK,CACb,KAAIC,IAAMD,KAAO,EAAGC,GAAK,EACzB,IAAIxqC,GAAGsmB,EAAGmkB,GAAKF,GAAK,EAAIC,GAAK,EAAGE,MAAQ,GAAKD,IAAM,EAAGE,MAAQD,MAAQ,CACtE,IAAIle,OAAQ,EAAG0O,EAAIoP,MAAQ,EAAI,EAAGppC,EAAIopC,KAAQC,GAAK,EAAK,EAAG1pC,EAAIoS,IAAIqtB,IAAMp/B,EAEzEA,IAAKg6B,CACLl7B,GAAIa,GAAM,IAAO2rB,MAAS,CAAI3rB,OAAS2rB,IAAOA,OAAQie,EACtD,MAAOje,KAAO,EAAGxsB,EAAIA,EAAI,IAAMiT,IAAIqtB,IAAMp/B,GAAIA,GAAKg6B,EAAG1O,MAAQ,GAC7DlG,EAAItmB,GAAM,IAAOwsB,MAAS,CAAIxsB,OAASwsB,IAAOA,OAAQge,EACtD,MAAOhe,KAAO,EAAGlG,EAAIA,EAAI,IAAMrT,IAAIqtB,IAAMp/B,GAAIA,GAAKg6B,EAAG1O,MAAQ,GAC7D,GAAIxsB,IAAM0qC,KAAM,MAAOpkB,GAAIskB,KAAQ/pC,GAAK,EAAI,GAAKgqC,aAC5C,IAAI7qC,IAAM,EAAGA,EAAI,EAAI2qC,UACrB,CAAErkB,EAAIA,EAAInS,KAAKsnB,IAAI,EAAG+O,GAAKxqC,GAAIA,EAAI2qC,MACxC,OAAQ9pC,GAAK,EAAI,GAAKylB,EAAInS,KAAKsnB,IAAI,EAAGz7B,EAAIwqC,IAG3C,GAAIM,YAAYC,WAChBD,YAAaC,YAAc,QAASC,WAAUC,MAAQ,GAAI1mC,KAAQ,KAAI,GAAIrD,GAAI,EAAGA,EAAI+pC,KAAK,GAAG5pC,SAAUH,EAAG,CAAEqD,EAAE2K,KAAKwF,MAAMnQ,EAAG0mC,KAAK,GAAG/pC,IAAO,MAAOqD,GAClJ,IAAI2mC,UAAUC,SACdD,UAAWC,UAAY,SAAS1mC,EAAG67B,KAAO,MAAO+J,aAAY5lC,EAAG67B,KAEhE,IAAI8K,QAAS,QAASC,UAASrqC,GAAK,MAAO+R,OAAM1O,QAAQrD,GACzD,IAAG6kC,QAAS,CACXiF,WAAa,SAASG,MAAQ,MAAQA,MAAK,GAAG5pC,OAAS,GAAK2I,OAAOG,SAAS8gC,KAAK,GAAG,IAAOjhC,OAAOwV,OAAOyrB,KAAK,IAAMF,YAAYE,MAChIC,UAAW,QAASI,SAAQ7mC,EAAEvD,GAAK,GAAG8I,OAAOG,SAAS1F,GAAI,MAAOA,GAAE8mC,aAAarqC,EAAI,OAAOiqC,WAAU1mC,EAAEvD,GACvGkqC,QAAS,QAASI,UAASxqC,GAAK,MAAOgJ,QAAOG,SAASnJ,IAAM+R,MAAM1O,QAAQrD,IAI5E,GAAIyqC,aAAc,SAAShnC,EAAG67B,KAAO,MAAO77B,GAAE67B,KAC9C,IAAIoL,gBAAiB,SAASjnC,EAAG67B,KAAO,MAAO77B,GAAE67B,IAAI,IAAI,GAAG,GAAG77B,EAAE67B,KACjE,IAAIqL,eAAgB,SAASlnC,EAAG67B,KAAO,GAAIv/B,GAAI0D,EAAE67B,IAAI,IAAI,GAAG,GAAG77B,EAAE67B,IAAM,OAAQv/B,GAAI,MAAUA,GAAK,MAASA,EAAI,IAAM,EACrH,IAAI6qC,gBAAiB,SAASnnC,EAAG67B,KAAO,MAAO77B,GAAE67B,IAAI,IAAI,GAAG,KAAK77B,EAAE67B,IAAI,IAAI,KAAK77B,EAAE67B,IAAI,IAAI,GAAG77B,EAAE67B,KAC/F,IAAIuL,eAAgB,SAASpnC,EAAG67B,KAAO,MAAQ77B,GAAE67B,IAAI,IAAI,GAAK77B,EAAE67B,IAAI,IAAI,GAAK77B,EAAE67B,IAAI,IAAI,EAAG77B,EAAE67B,KAG5F,SAASwL,WAAUtmC,KAAM9E,GACxB,GAAII,GAAE,GAAIqhC,MAAOpL,EAAG2M,GAAIxiC,EAAG6qC,GAC3B,IAAGrrC,IAAM,OAAQ,CAChBqrC,IAAMjpC,KAAKwc,CACX,IAAGumB,SAAW77B,OAAOG,SAASrH,MAAOhC,EAAIgC,KAAK0H,MAAM1H,KAAKwc,EAAGxc,KAAKwc,EAAE,EAAE9Z,MAAMuO,SAAS,eAC/E,KAAI7S,EAAI,EAAGA,GAAKsE,OAAQtE,EAAG,CAAEJ,GAAG4B,OAAOC,aAAa+oC,eAAe5oC,KAAMipC,KAAOA,MAAK,EAC1FvmC,MAAQ,MACF,QAAOA,MACb,IAAK,GAAG1E,EAAI2qC,YAAY3oC,KAAMA,KAAKwc,EAAI,MACvC,KAAK,GAAGxe,GAAKJ,IAAM,IAAMirC,cAAgBD,gBAAgB5oC,KAAMA,KAAKwc,EAAI,MACxE,KAAK,GAAGxe,EAAI8qC,eAAe9oC,KAAMA,KAAKwc,EAAI,MAC1C,KAAK,GAAG,GAAG5e,IAAM,IAAK,CAAEI,EAAIoqC,SAASpoC,KAAMA,KAAKwc,EAAI,QAErDxc,KAAKwc,GAAG9Z,IAAM,OAAO1E,GAGtB,QAASkrC,YAAWtrC,EAAG+pB,IAAKpqB,GAC3B,GAAImF,MAAMtE,CACV,IAAGb,IAAM,OAAQ,CAChB,IAAIa,EAAI,EAAGA,GAAKupB,IAAIppB,SAAUH,EAAG4B,KAAKmpC,cAAcxhB,IAAIroB,WAAWlB,GAAI4B,KAAKwc,EAAI,EAAIpe,EACpFsE,MAAO,EAAIilB,IAAIppB,WACT,QAAOX,GACb,IAAM,GAAG8E,KAAO,CAAG1C,MAAKA,KAAKwc,GAAKmL,IAAI,GAAK,MAC3C,KAAM,GAAGjlB,KAAO,CAAG1C,MAAKA,KAAKwc,EAAE,GAAKmL,IAAM,GAAKA,QAAS,CAAG3nB,MAAKA,KAAKwc,EAAE,GAAKmL,IAAI,GAAKA,QAAS,CAAG3nB,MAAKA,KAAKwc,GAAKmL,IAAI,GAAK,MACzH,KAAM,GAAGjlB,KAAO,CAAG1C,MAAKopC,cAAczhB,IAAK3nB,KAAKwc,EAAI,MACpD,KAAM,GAAG9Z,KAAO,CAAG,IAAGnF,IAAM,IAAK,CAAEyC,KAAKqpC,cAAc1hB,IAAK3nB,KAAKwc,EAAI,OAEpE,IAAK,IAAI,KACT,MAAM,EAAG9Z,KAAO,CAAG1C,MAAKspC,aAAa3hB,IAAK3nB,KAAKwc,EAAI,OAEpDxc,KAAKwc,GAAK9Z,IAAM,OAAO1C,MAGxB,QAASupC,WAAUx6B,KAAM4B,KACxB5B,KAAKyN,EAAI7L,GACT5B,MAAKy6B,WAAaR,SAClBj6B,MAAK06B,YAAcP,WAGpB,QAASQ,WAAU36B,KAAMxQ,QAAUwQ,KAAKyN,GAAKje,OAE7C,QAASorC,WAAU56B,KAAMxQ,QAAUwQ,KAAKyN,GAAKje,OAE7C,QAASqrC,SAAQC,IAChB,GAAI7rC,GAAI+kC,QAAU,GAAI77B,QAAO2iC,IAAM,GAAI55B,OAAM45B,GAC7CN,WAAUvrC,EAAG,EACb,OAAOA,GAIR,QAAS8rC,cAAa9nC,KAAM+nC,GAAIva,MAC/B,GAAIwa,SAASC,QAAS1rC,MACtBgrC,WAAUvnC,KAAMA,KAAKwa,GAAK,EAC1B,OAAMxa,KAAKwa,EAAIxa,KAAKzD,OAAQ,CAC3B,GAAI2rC,IAAKloC,KAAKwnC,WAAW,EACzB,IAAGU,GAAK,IAAMA,IAAMA,GAAK,OAAUloC,KAAKwnC,WAAW,GAAK,MAAO,EAC/D,IAAIW,GAAIC,WAAWF,KAAOE,WAAW,MACrCJ,SAAUhoC,KAAKwnC,WAAW,EAC1BjrC,QAASyrC,QAAU,GACnB,KAAIC,QAAU,EAAGA,QAAS,GAAMD,QAAU,MAASC,QAAS1rC,UAAYyrC,QAAUhoC,KAAKwnC,WAAW,IAAM,MAAQ,EAAES,OAClH,IAAI7R,GAAI+R,EAAE5sC,EAAEyE,KAAMzD,OAAQixB,KAC1B,IAAGua,GAAG3R,EAAG+R,EAAGD,IAAK,QAKnB,QAASG,aACR,GAAIlC,SAAWmC,MAAQ,IACvB,IAAIC,QAAS,QAASC,WAAUX,IAC/B,GAAI7rC,GAAI4rC,QAAQC,GAChBN,WAAUvrC,EAAG,EACb,OAAOA,GAGR,IAAIysC,QAASF,OAAOD,MAEpB,IAAII,QAAS,QAASC,aACrBF,OAAOlsC,OAASksC,OAAOjuB,CACvB,IAAGiuB,OAAOlsC,OAAS,EAAG4pC,KAAK/7B,KAAKq+B,OAChCA,QAAS,KAGV,IAAI3c,MAAO,QAAS8c,SAAQf,IAC3B,GAAGA,GAAKY,OAAOlsC,OAASksC,OAAOjuB,EAAG,MAAOiuB,OACzCC,SACA,OAAQD,QAASF,OAAOl5B,KAAKX,IAAIm5B,GAAG,EAAGS,QAGxC,IAAIrrB,KAAM,QAAS4rB,UAClBH,QACA,OAAO1C,aAAYG,OAGpB,IAAI/7B,MAAO,QAAS0+B,SAAQ36B,KAAOu6B,QAAUD,QAASt6B,GAAK2d,MAAKwc,OAEhE,QAASxc,KAAKA,KAAM1hB,KAAKA,KAAM6S,IAAIA,IAAK8rB,MAAM5C,MAG/C,QAAS6C,cAAaC,GAAI1mC,KAAM2mC,QAAS3sC,QACxC,GAAIX,GAAIutC,SAAS5mC,MAAOiY,CACxB,KAAIje,OAAQA,OAAS6rC,WAAWxsC,GAAGse,IAAMgvB,aAAa3sC,QAAU,CAChEie,GAAI,GAAK5e,GAAK,IAAO,EAAI,GAAK,EAAIW,MAClC,IAAGA,QAAU,MAAQie,CAAG,IAAGje,QAAU,QAAUie,CAAG,IAAGje,QAAU,UAAYie,CAC3E,IAAIxe,GAAIitC,GAAGnd,KAAKtR,EAChB,IAAG5e,GAAK,IAAMI,EAAEyrC,YAAY,EAAG7rC,OAC1B,CACJI,EAAEyrC,YAAY,GAAI7rC,EAAI,KAAQ,IAC9BI,GAAEyrC,YAAY,EAAI7rC,GAAK,GAExB,IAAI,GAAIQ,GAAI,EAAGA,GAAK,IAAKA,EAAG,CAC3B,GAAGG,QAAU,IAAM,CAAEP,EAAEyrC,YAAY,GAAIlrC,OAAS,KAAM,IAAOA,UAAW,MACnE,CAAEP,EAAEyrC,YAAY,EAAGlrC,OAAS,QAElC,GAAGA,OAAS,GAAK+pC,OAAO4C,SAAUD,GAAG7+B,KAAK8+B,SAI3C,QAASE,cAAappC,KAAMzD,QAC3B,OAAS8sC,IAAKrpC,KAAKwnC,WAAW,GAAI8B,KAAMtpC,KAAKwnC,WAAW,IAIzD,QAAS+B,eAAcvpC,KAAMzD,QAC5B,GAAIkY,OAAQzU,KAAKwa,CACjB,IAAI8Q,OAAQtrB,KAAKwnC,WAAW,EAC5B,IAAI1lC,KAAM0nC,mBAAmBxpC,KAC7B,IAAIypC,aACJ,IAAI3H,IAAMlmC,EAAGkG,IAAK4wB,EAAG5wB,IACrB,KAAIwpB,MAAQ,KAAO,EAAG,CAErB,GAAIoe,cAAe1pC,KAAKwnC,WAAW,EACnC,KAAI,GAAIprC,GAAI,EAAGA,GAAKstC,eAAgBttC,EAAGqtC,UAAUr/B,KAAKg/B,aAAappC,MACnE8hC,GAAEhmC,EAAI2tC,cAEF3H,GAAEhmC,EAAI,MAAQinC,UAAUjhC,KAAO,MACpC,KAAIwpB,MAAQ,KAAO,EAAG,EAGtBtrB,KAAKwa,EAAI/F,MAAQlY,MACjB,OAAOulC,GAER,QAAS6H,eAAc7nC,IAAK9F,GAE3B,GAAGA,GAAK,KAAMA,EAAI4rC,QAAQ,EAAE,EAAE9lC,IAAIlG,EAAEW,OACpCP,GAAEyrC,YAAY,EAAE,EAChBmC,oBAAmB9nC,IAAIlG,EAAGI,EAC1B,OAAOA,GAIR,QAAS6tC,YAAW7pC,MACnB,GAAI8pC,KAAM9pC,KAAKwnC,WAAW,EAC1B,IAAIuC,WAAY/pC,KAAKwnC,WAAW,EAChCuC,YAAa/pC,KAAKwnC,WAAW,IAAK,EAClC,IAAIwC,SAAUhqC,KAAKwnC,WAAW,EAC9B,QAASp5B,EAAE07B,IAAKC,UAAWA,WAE5B,QAASE,YAAWC,KAAMluC,GACzB,GAAGA,GAAK,KAAMA,EAAI4rC,QAAQ,EAC1B5rC,GAAEyrC,aAAa,EAAGyC,KAAK97B,EACvBpS,GAAEyrC,YAAY,EAAGyC,KAAKH,YAAczkC,UAAY4kC,KAAKH,UAAYG,KAAKnuC,EACtEC,GAAEyrC,YAAY,EAAG,EACjB,OAAOzrC,GAKR,QAASmuC,gBAAgBnqC,KAAMzD,QAAU,MAAOitC,oBAAmBxpC,KAAMzD,QAGzE,QAAS6tC,4BAA2BpqC,MACnC,GAAIqqC,eAAgBrqC,KAAKwnC,WAAW,EACpC,OAAO6C,iBAAkB,GAAKA,gBAAkB,WAAa,GAAKrqC,KAAKwnC,WAAW6C,cAAe,QAElG,QAASC,4BAA2BtqC,KAAMhE,GACzC,IAAIA,EAAGA,EAAI4rC,QAAQ,IACnB5rC,GAAEyrC,YAAY,EAAGznC,KAAKzD,OAAS,EAAIyD,KAAKzD,OAAS,WACjD,IAAGyD,KAAKzD,OAAS,EAAGP,EAAEyrC,YAAY,EAAGznC,KAAM,OAC3C,OAAOhE,GAIR,QAASwtC,oBAAmBxpC,MAC3B,GAAIqqC,eAAgBrqC,KAAKwnC,WAAW,EACpC,OAAO6C,iBAAkB,EAAI,GAAKrqC,KAAKwnC,WAAW6C,cAAe,QAElE,QAAST,oBAAmB5pC,KAAMhE,GACjC,GAAGA,GAAK,KAAMA,EAAI4rC,QAAQ,EAAE,EAAE5nC,KAAKzD,OACnCP,GAAEyrC,YAAY,EAAGznC,KAAKzD,OACtB,IAAGyD,KAAKzD,OAAS,EAAGP,EAAEyrC,YAAY,EAAGznC,KAAM,OAC3C,OAAOhE,GAIR,GAAIuuC,aAAcH,0BAClB,IAAII,aAAcF,0BAIlB,SAASG,gBAAezqC,MACvB,GAAIL,GAAIK,KAAK0F,MAAM1F,KAAKwa,EAAGxa,KAAKwa,EAAE,EAClC,IAAIkwB,OAAQ/qC,EAAE,GAAK,EAAGgrC,KAAOhrC,EAAE,GAAK,CACpCK,MAAKwa,GAAG,CACR7a,GAAE,IAAM,GACR,IAAIirC,IAAKD,OAAS,EAAIvE,UAAU,EAAE,EAAE,EAAE,EAAEzmC,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,IAAI,GAAKonC,cAAcpnC,EAAE,IAAI,CACtF,OAAO+qC,OAAQE,GAAG,IAAMA,GAIzB,QAASC,oBAAmB7qC,MAC3B,GAAIkqC,OAAQnuC,KAAOb,KACnBgvC,MAAKnuC,EAAED,EAAIkE,KAAKwnC,WAAW,EAC3B0C,MAAKhvC,EAAEY,EAAIkE,KAAKwnC,WAAW,EAC3B0C,MAAKnuC,EAAEqS,EAAIpO,KAAKwnC,WAAW,EAC3B0C,MAAKhvC,EAAEkT,EAAIpO,KAAKwnC,WAAW,EAC3B,OAAO0C,MAGR,QAASY,oBAAmBhvC,EAAGE,GAC9B,IAAIA,EAAGA,EAAI4rC,QAAQ,GACnB5rC,GAAEyrC,YAAY,EAAG3rC,EAAEC,EAAED,EACrBE,GAAEyrC,YAAY,EAAG3rC,EAAEZ,EAAEY,EACrBE,GAAEyrC,YAAY,EAAG3rC,EAAEC,EAAEqS,EACrBpS,GAAEyrC,YAAY,EAAG3rC,EAAEZ,EAAEkT,EACrB,OAAOpS,GAIR,QAAS+uC,YAAW/qC,KAAMzD,QAAU,MAAOyD,MAAKwnC,WAAW,EAAG,KAC9D,QAASwD,YAAWhrC,KAAMhE,GAAK,OAAQA,GAAK4rC,QAAQ,IAAIH,YAAY,EAAG,IAAKznC,MAG5E,GAAIirC,OACH,EAAM,SACNrpC,EAAM,UACN0K,GAAM,UACN8G,GAAM,QACNgI,GAAM,SACN0S,GAAM,QACNod,GAAM,OACNC,GAAM,gBACNC,IAAM,QAEP,IAAIC,OAAQ7K,UAAUyK,KAGtB,SAASK,gBAAetrC,KAAMzD,QAC7B,GAAImK,OACJ,IAAI0vB,GAAIp2B,KAAKwnC,WAAW,EACxB9gC,KAAI6kC,UAAYnV,EAAI,CACpB1vB,KAAI8kC,WAAapV,IAAM,CACvB1vB,KAAIzG,MAAQD,KAAKwnC,WAAW,EAC5B9gC,KAAI+kC,cAAgBzrC,KAAKwnC,WAAW,EAAG,IACvC9gC,KAAIglC,KAAS1rC,KAAKwnC,WAAW,EAC7B9gC,KAAIilC,OAAS3rC,KAAKwnC,WAAW,EAC7B9gC,KAAIklC,MAAS5rC,KAAKwnC,WAAW,EAC7B9gC,KAAImlC,OAAS7rC,KAAKwnC,WAAW,GAI9B,QAASsE,iBAAgB9rC,KAAMzD,QAC9B,GAAI65B,GAAIp2B,KAAKwnC,WAAW,EACxBxnC,MAAKwa,GACL,IAAI9T,MACHqlC,QAAS3V,EAAI,EACb4V,WAAY5V,EAAI,EAChB6V,SAAU7V,EAAI,GACd8V,QAAS9V,EAAI,GACb+V,UAAW/V,EAAI,GACfgW,QAAShW,EAAI,IAEd,OAAO1vB,KAOR,GAAI2lC,UAEHC,6EAA8E,YAG9EC,sCAAuC,OAGvCC,sCAAuC,OACvCC,6EAA8E,OAG9EC,uCAAwC,OACxCC,8EAA+E,OAG/EC,sCAAuC,OACvCC,0CAA2C,OAC3CC,0CAA2C,OAC3CC,sCAAuC,OAGvCC,6DAA8D,YAC9DC,sEAAuE,YACvEC,wEAAyE,WAGzEC,wEAAyE,OAGzEC,oCAAqC,WACrCC,2EAA4E,WAG5EC,sCAAuC,OACvCC,6EAA8E,OAG9EC,qCAAsC,aACtCC,4EAA6E,aAG7EC,8EAA+E,OAG/EC,oCAAqC,OACrCC,wCAAyC,OAGzCC,4CAA6C,OAG7CC,uCAAwC,OACxCC,8EAA+E,OAG/EC,wCAAyC,OACzCC,+EAAgF,OAGhFC,yCAA0C,OAC1CC,gFAAiF,OAGjFC,gDAAiD,OACjDC,6CAA8C,OAC9CC,uFAAwF,OACxFC,oFAAqF,OAGrFC,sCAAuC,OACvCC,6EAA8E,OAG9EC,qCAAsC,OACtCC,2CAA4C,OAC5CC,uCAAwC,OACxCC,kFAAmF,OACnFC,8EAA+E,OAC/EC,4EAA6E,OAG7EC,4CAA6C,OAC7CC,mFAAoF,OAGpFC,kCAAmC,OACnCC,uCAAwC,OACxCC,sCAAuC,OACvCC,2CAA4C,OAG5CC,qCAAsC,OAGtCC,iCAAkC,OAClCC,wEAAyE,OAGzEC,0DAA2D,SAG3DC,wCAAyC,OACzCC,6CAA8C,OAG9CC,uCAAwC,MACxCC,gDAAiD,MAGjDC,iDAAkD,OAClDC,uFAAwF,OAGxFC,iDAAkD,OAGlDC,2DAA4D,OAG5DC,sCAAuC,OAGvCC,4DAA6D,OAC7DC,oEAAqE,OACrEC,0EAA2E,OAC3EC,4EAA6E,OAC7EC,0EAA2E,OAC3EC,4EAA6E,OAC7EC,2EAA4E,OAG5EC,2DAA4D,OAE5DC,2DAA4D,OAC5DC,0DAA2D,OAE3DC,MAAS,KAGV,IAAIC,SAAU,WACb,GAAI90C,IACH+0C,WACCC,KAAM,6EACNC,KAAM,uDACNC,KAAM,0DACNC,KAAM,iFAEPC,MACCJ,KAAM,gFACNE,KAAM,0CAEPG,QACCL,KAAM,4EACNE,KAAM,sCAEPI,QACCN,KAAM,yEACNE,KAAM,mCAGR/Q,MAAKnkC,GAAGmoC,QAAQ,SAASj1B,GAAK,IAAIlT,EAAEkT,GAAG+hC,KAAMj1C,EAAEkT,GAAG+hC,KAAOj1C,EAAEkT,GAAG8hC,MAC9D7Q,MAAKnkC,GAAGmoC,QAAQ,SAASj1B,GAAIixB,KAAKnkC,EAAEkT,IAAIi1B,QAAQ,SAAS5Q,GAAK8Y,QAAQrwC,EAAEkT,GAAGqkB,IAAMrkB,KACjF,OAAOlT,KAGR,IAAIu1C,SAAU9Q,UAAU4L,QAExBxH,OAAM2M,GAAK,8DAEX,SAASC,UAASzxC,KAAMwtB,MACvB,GAAIkkB,SACJ,KAAI1xC,OAASA,KAAKsgB,MAAO,MAAOtgB,KAChC,IAAI2xC,KAAOZ,aAAeM,UAAYO,cAAgBC,UAAYP,UACjEQ,aAAeC,YAAcC,aAAeZ,QAASa,YAAcC,OACnEC,QAASC,QAASC,MAAO,KACzBryC,KAAKsgB,MAAMkhB,eAAe2C,QAAQ,SAAS1kC,GAC3C,GAAIC,GAAIiiC,YAAYliC,EACpB,QAAOC,EAAE,GAAGhC,QAAQ+jC,QAAQ,MAC3B,IAAK,QAAS,KACd,KAAK,SAAUkQ,GAAGU,MAAQ3yC,EAAE,SAAWA,EAAE,GAAG4gB,MAAM,aAAa,GAAG,KAAK,GAAM,MAC7E,KAAK,WAAYoxB,MAAMhyC,EAAE4yC,WAAa5yC,EAAE6yC,WAAa,MACrD,KAAK,YACJ,GAAGZ,GAAGtF,QAAQ3sC,EAAE6yC,gBAAkBjtC,UAAWqsC,GAAGtF,QAAQ3sC,EAAE6yC,cAAcnoC,KAAK1K,EAAE8yC,cAC1E,IAAGhlB,KAAKilB,IAAKC,QAAQC,MAAMjzC,EAChC,SAGH,IAAGiyC,GAAGU,QAAUxN,MAAM2M,GAAI,KAAM,IAAIn1C,OAAM,sBAAwBs1C,GAAGU,MACrEV,IAAGiB,UAAYjB,GAAGC,WAAWr1C,OAAS,EAAIo1C,GAAGC,WAAW,GAAK,EAC7DD,IAAGkB,IAAMlB,GAAGP,KAAK70C,OAAS,EAAIo1C,GAAGP,KAAK,GAAK,EAC3CO,IAAGmB,MAAQnB,GAAGL,OAAO/0C,OAAS,EAAIo1C,GAAGL,OAAO,GAAK,EACjDK,IAAG7tC,SAAW4tC,YACPC,IAAGC,UACV,OAAOD,IAGR,GAAIoB,gBAAiBvO,UAAU,QAAS,MACvC6N,MAASxN,MAAM2M,GACfwB,YAAanO,MAAMQ,IACnB4N,YAAapO,MAAMO,KAGpB,IAAI8N,kBACF,MAAO,oBACP,MAAO,4DACP,OAAQ3B,QAAQa,KAAK,KACrB7N,IAAI,SAAS9kC,GACd,MAAO+kC,WAAU,UAAW,MAAO8N,UAAY7yC,EAAE,GAAI8yC,YAAe9yC,EAAE,MAGvE,SAAS0zC,UAASxB,GAAInkB,MACrB,GAAIxxB,MAAQu3B,CACZv3B,GAAEA,EAAEO,QAAU,UACdP,GAAEA,EAAEO,QAAU,cACdP,GAAIA,EAAE0e,OAAOw4B,eACb,IAAIE,IAAK,SAASnhB,GACjB,GAAG0f,GAAG1f,IAAM0f,GAAG1f,GAAG11B,OAAS,EAAG,CAC7Bg3B,EAAIoe,GAAG1f,GAAG,EACVj2B,GAAEA,EAAEO,QAAWioC,UAAU,WAAY,MACpCgO,UAAajf,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrCgf,YAAezB,QAAQ7e,GAAGzE,KAAK6lB,UAAY,WAI9C,IAAIC,IAAK,SAASrhB,GACjB0f,GAAG1f,GAAGkS,QAAQ,SAAS5Q,GACtBv3B,EAAEA,EAAEO,QAAWioC,UAAU,WAAY,MACpCgO,UAAajf,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrCgf,YAAezB,QAAQ7e,GAAGzE,KAAK6lB,UAAY,YAI9C,IAAIE,IAAK,SAAS33C,IAChB+1C,GAAG/1C,QAAQuoC,QAAQ,SAAS5Q,GAC5Bv3B,EAAEA,EAAEO,QAAWioC,UAAU,WAAY,MACpCgO,UAAajf,EAAE,IAAM,IAAM,GAAG,KAAOA,EACrCgf,YAAehB,QAAQ31C,GAAG,OAI7Bw3C,IAAG,YACHE,IAAG,SACHC,IAAG,WACF,OAAQ,UAAUpP,QAAQiP,KAC1B,YAAa,WAAY,aAAajP,QAAQoP,GAC/C,IAAGv3C,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,UAAcP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KACnE,MAAO1B,GAAE0Q,KAAK,IAGf,GAAI8mC,OACHC,GAAI,qFACJC,MAAO,qFAGR,SAASC,YAAW3zC,KAAM4zC,iBACzB,IAAK5zC,KAAM,MAAOA,KAClB,IAAI4zC,gBAAgBp2C,OAAO,KAAO,IAAK,CACtCo2C,gBAAkB,IAAIA,gBAEvB,GAAIxB,QACJ,IAAIyB,QACJ,IAAIC,iCAAkC,SAAUn9B,IAC/C,GAAIo9B,UAAWH,gBAAgBnR,MAAM,IACrCsR,UAASC,KACT,IAAIC,QAASt9B,GAAG8rB,MAAM,IACtB,IAAIyR,YACJ,OAAOD,OAAO13C,SAAW,EAAG,CAC3B,GAAI43C,OAAQF,OAAOj6B,OACnB,IAAIm6B,QAAU,KAAM,CACnBJ,SAASC,UACH,IAAIG,QAAU,IAAK,CACzBJ,SAAS3pC,KAAK+pC,QAGhB,MAAOJ,UAASrnC,KAAK,KAGtB1M,MAAKsgB,MAAMkhB,UAAU2C,QAAQ,SAAS1kC,GACrC,GAAIC,GAAIiiC,YAAYliC,EAEpB,IAAIC,EAAE,KAAO,gBAAiB,CAC7B,GAAI00C,OAAUA,KAAIC,KAAO30C,EAAE20C,IAAMD,KAAIE,OAAS50C,EAAE40C,MAAQF,KAAIG,GAAK70C,EAAE60C,EAAIH,KAAII,WAAa90C,EAAE80C,UAC1F,IAAIC,eAAgB/0C,EAAE80C,aAAe,WAAa90C,EAAE40C,OAASR,gCAAgCp0C,EAAE40C,OAC/FlC,MAAKqC,eAAiBL,GACtBP;KAAKn0C,EAAE60C,IAAMH,MAGfhC,MAAK,OAASyB,IACd,OAAOzB,MAGRvN,MAAM2O,KAAO,8DAEb,IAAIkB,WAAYlQ,UAAU,gBAAiB,MAE1C6N,MAASxN,MAAM2O,MAIhB,SAASmB,YAAWvC,MACnB,GAAIp2C,KACJA,GAAEA,EAAEO,QAAU,UACdP,GAAEA,EAAEO,QAAU,SACd4jC,MAAKiS,KAAK,QAAQjO,QAAQ,SAASyQ,KAAO,GAAIR,KAAMhC,KAAK,OAAOwC,IAC/D54C,GAAEA,EAAEO,QAAWioC,UAAU,eAAgB,KAAM4P,MAEhD,IAAGp4C,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,kBAAsBP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KAC3E,MAAO1B,GAAE0Q,KAAK,IAIf,GAAImoC,cACF,cAAe,aACf,mBAAoB,kBACpB,cAAe,aACf,oBAAqB,eACrB,iBAAkB,gBAClB,cAAe,cACf,aAAc,YACd,aAAc,WACd,iBAAkB,aAClB,gBAAiB,eACjB,cAAe,aACf,aAAc,YACd,WAAY,UACZ,kBAAmB,cAAe,SAClC,mBAAoB,eAAgB,QAGtChQ,OAAMgQ,WAAa,yEACnBrB,MAAKqB,WAAc,uFAEnB,IAAIC,kBAAmB,WACtB,GAAIh5C,GAAI,GAAImS,OAAM4mC,WAAWt4C,OAC7B,KAAI,GAAIH,GAAI,EAAGA,EAAIy4C,WAAWt4C,SAAUH,EAAG,CAC1C,GAAIb,GAAIs5C,WAAWz4C,EACnB,IAAIsnC,GAAI,MAAOnoC,EAAE,GAAGw6B,OAAO,EAAEx6B,EAAE,GAAGoC,QAAQ,MAAO,KAAMpC,EAAE,GAAGw6B,OAAOx6B,EAAE,GAAGoC,QAAQ,KAAK,EACrF7B,GAAEM,GAAK,GAAIunC,QAAO,IAAMD,EAAI,eAAkBA,EAAI,KAEnD,MAAO5nC,KAGR,SAASi5C,kBAAiB/0C,MACzB,GAAIka,KAEJ,KAAI,GAAI9d,GAAI,EAAGA,EAAIy4C,WAAWt4C,SAAUH,EAAG,CAC1C,GAAIb,GAAIs5C,WAAWz4C,GAAI44C,IAAMh1C,KAAKsgB,MAAMw0B,iBAAiB14C,GACzD,IAAG44C,KAAO,MAAQA,IAAIz4C,OAAS,EAAG2d,EAAE3e,EAAE,IAAMy5C,IAAI,EAChD,IAAGz5C,EAAE,KAAO,QAAU2e,EAAE3e,EAAE,IAAK2e,EAAE3e,EAAE,IAAM,GAAI4F,MAAK+Y,EAAE3e,EAAE,KAGvD,MAAO2e,GAGR,GAAI+6B,qBAAsBzQ,UAAU,oBAAqB,MAExD0Q,WAAYrQ,MAAMgQ,WAClBM,WAAYtQ,MAAMC,GAClBsQ,gBAAiBvQ,MAAME,QACvBsQ,iBAAkBxQ,MAAMG,SACxBiO,YAAapO,MAAMO,KAGpB,SAASkQ,SAAQ/5C,EAAGmoC,EAAGhR,EAAG12B,EAAGke,GAC5B,GAAGA,EAAE3e,IAAM,MAAQmoC,GAAK,MAAQA,IAAM,GAAI,MAC1CxpB,GAAE3e,GAAKmoC,CACP1nC,GAAEA,EAAEO,QAAWm2B,EAAI8R,UAAUjpC,EAAEmoC,EAAEhR,GAAK2R,SAAS9oC,EAAEmoC,GAGlD,QAAS6R,kBAAiB3f,GAAIpI,MAC7B,GAAIxxB,IAAK4oC,WAAYqQ,qBAAsB/6B,IAC3C,KAAI0b,GAAI,MAAO55B,GAAE0Q,KAAK,GAGtB,IAAGkpB,GAAG4f,aAAe,KAAMF,QAAQ,wBAA0B1f,IAAG4f,cAAgB,SAAW5f,GAAG4f,YAAc/Q,aAAa7O,GAAG4f,YAAahoB,KAAKilB,MAAOgD,WAAW,kBAAmBz5C,EAAGke,EACtL,IAAG0b,GAAG8f,cAAgB,KAAMJ,QAAQ,yBAA2B1f,IAAG8f,eAAiB,SAAW9f,GAAG8f,aAAejR,aAAa7O,GAAG8f,aAAcloB,KAAKilB,MAAOgD,WAAW,kBAAmBz5C,EAAGke,EAE3L,KAAI,GAAI9d,GAAI,EAAGA,GAAKy4C,WAAWt4C,SAAUH,EAAG,CAAE,GAAIb,GAAIs5C,WAAWz4C,EAAIk5C,SAAQ/5C,EAAE,GAAIq6B,GAAGr6B,EAAE,IAAK,KAAMS,EAAGke,GACtG,GAAGle,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,sBAA0BP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KAC/E,MAAO1B,GAAE0Q,KAAK,IAIf,GAAIipC,aACF,cAAe,cAAe,WAC9B,aAAc,aAAc,WAC5B,UAAW,UAAW,WACtB,cAAe,cAAe,WAC9B,UAAW,UAAW,WACtB,oBAAqB,oBAAqB,SAC1C,YAAa,YAAa,SAC1B,gBAAiB,gBAAiB,SAClC,YAAa,YAAa,SAC1B,eAAgB,eAAgB,QAChC,gBAAiB,gBAAiB,OAGpC9Q,OAAM8Q,UAAY,2EAClBnC,MAAKmC,UAAa,yFAElB,SAASC,iBAAgB51C,KAAMka,GAC9B,GAAIiR,KAAQ,KAAIjR,EAAGA,IAEnBy7B,WAAUxR,QAAQ,SAAS5oC,GAC1B,OAAOA,EAAE,IACR,IAAK,SAAU2e,EAAE3e,EAAE,KAAOyE,KAAKsgB,MAAMkjB,SAASjoC,EAAE,UAAU,EAAI,MAC9D,KAAK,OAAQ2e,EAAE3e,EAAE,KAAOyE,KAAKsgB,MAAMkjB,SAASjoC,EAAE,UAAU,KAAO,MAAQ,MACvE,KAAK,MACJ,GAAIy5C,KAAMh1C,KAAKsgB,MAAM,GAAIqjB,QAAO,IAAMpoC,EAAE,GAAK,eAAkBA,EAAE,GAAK,KACtE,IAAGy5C,KAAOA,IAAIz4C,OAAS,EAAG4uB,EAAE5vB,EAAE,IAAMy5C,IAAI,EACxC,SAIH,IAAG7pB,EAAE0qB,cAAgB1qB,EAAE2qB,cAAe,CACrC,GAAIviB,GAAI0Q,YAAY9Y,EAAE0qB,aACtB,IAAIriB,GAAI,EAAGuiB,KAAO,CAClB,KAAI,GAAI35C,GAAI,EAAGA,IAAMm3B,EAAEh3B,SAAUH,EAAG,CACnC,OAAOm3B,EAAEn3B,GAAGm3B,GACX,IAAK,aAAcwiB,KAAOviB,CAAGtZ,GAAE87B,YAAeziB,IAAIn3B,GAAI,CAAG,MACzD,KAAK,iBAAkBA,CAAG,QAG5B,GAAI65C,OAAQhS,YAAY9Y,EAAE2qB,eAAevR,IAAI,SAAS9kC,GAAK,MAAOwjC,UAASxjC,EAAE8zB,IAC7ErZ,GAAEg8B,WAAaD,MAAMvwC,MAAMqwC,KAAMA,KAAO77B,EAAE87B,YAE3C,MAAO97B,GAGR,GAAIi8B,oBAAqB3R,UAAU,aAAc,MAChD6N,MAASxN,MAAM8Q,UACfS,WAAYvR,MAAMM,IAGnB,SAASkR,iBAAgBzgB,GAAIpI,MAC5B,GAAIxxB,MAAQke,KAAQo8B,EAAI9R,SACxB,KAAI5O,GAAIA,KACRA,IAAG2gB,YAAc,SACjBv6C,GAAEA,EAAEO,QAAU,UACdP,GAAEA,EAAEO,QAAU,kBAEdo5C,WAAUxR,QAAQ,SAAS5oC,GAC1B,GAAGq6B,GAAGr6B,EAAE,MAAQ+J,UAAW,MAC3B,IAAIiuB,EACJ,QAAOh4B,EAAE,IACR,IAAK,SAAUg4B,EAAIqC,GAAGr6B,EAAE,GAAK,MAC7B,KAAK,OAAQg4B,EAAIqC,GAAGr6B,EAAE,IAAM,OAAS,OAAS,OAE/C,GAAGg4B,IAAMjuB,UAAWtJ,EAAEA,EAAEO,QAAW+5C,EAAE/6C,EAAE,GAAIg4B,IAI5Cv3B,GAAEA,EAAEO,QAAW+5C,EAAE,eAAgBA,EAAE,YAAaA,EAAE,aAAc,mCAAmCA,EAAE,aAAcA,EAAE,QAAS14C,OAAOg4B,GAAGogB,eAAgBt1C,KAAK,EAAGwjC,SAAS,YACzKloC,GAAEA,EAAEO,QAAW+5C,EAAE,gBAAiBA,EAAE,YAAa1gB,GAAGsgB,WAAW3R,IAAI,SAASxoC,GAAK,MAAO,aAAeA,EAAI,gBAAkB2Q,KAAK,KAAMhM,KAAMk1B,GAAGogB,WAAY9R,SAAS,UACtK,IAAGloC,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,eAAmBP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KACxE,MAAO1B,GAAE0Q,KAAK,IAGfm4B,MAAM2R,WAAa,yEACnBhD,MAAKgD,WAAc,uFAEnB,IAAIC,WAAY,eAChB,SAASC,kBAAiB12C,KAAMwtB,MAC/B,GAAItT,MAAQpT,IACZ,IAAI0a,GAAIxhB,KAAKsgB,MAAMm2B,UACnB,IAAGj1B,EAAG,IAAI,GAAIplB,GAAI,EAAGA,GAAKolB,EAAEjlB,SAAUH,EAAG,CACxC,GAAIqD,GAAI+hB,EAAEplB,GAAIsD,EAAIiiC,YAAYliC,EAC9B,QAAOC,EAAE,IACR,IAAK,QAAS,KACd,KAAK,cACJ,GAAGA,EAAE2yC,QAAUxN,MAAM2R,WAAY,KAAM,sBAAwB92C,EAAE2yC,KACjE,IAAG3yC,EAAEi3C,SAAWj3C,EAAEi3C,UAAY9R,MAAMM,GAAI,KAAM,mBAAqBzlC,EAAEi3C,OACrE,MACD,KAAK,YAAa7vC,KAAOpH,EAAEoH,IAAM,MACjC,KAAK,cAAeA,KAAO,IAAM,MACjC,SAAS,GAAIrH,EAAE9B,QAAQ,UAAY,EAAG,CACrC,GAAIi5C,MAAOn3C,EAAEgjC,MAAM,IACnB,IAAIlgC,MAAOq0C,KAAK,GAAGxuC,UAAU,GAAIwd,KAAOgxB,KAAK,EAE7C,QAAOr0C,MACN,IAAK,QAAS,IAAK,SAAU,IAAK,OAAQ,IAAK,SAC9C2X,EAAEpT,MAAQ87B,YAAYhd,KACtB,MACD,KAAK,OACJ1L,EAAEpT,MAAQk8B,aAAapd,KAAM,YAC7B,MACD,KAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,MAAO,IAAK,OAC5D1L,EAAEpT,MAAQw1B,SAAS1W,KAAM,GACzB,MACD,KAAK,KAAM,IAAK,KAAM,IAAK,UAC1B1L,EAAEpT,MAAQy4B,WAAW3Z,KACrB,MACD,KAAK,WAAY,IAAK,OACrB1L,EAAEpT,MAAQ,GAAI3F,MAAKykB,KACnB,MACD,KAAK,KAAM,IAAK,QACf1L,EAAEpT,MAAQ87B,YAAYhd,KACtB,MACD,SACC,SAAU8sB,WAAY,YAAaA,QAAQmE,KAAK,aAAcp3C,EAAG8C,KAAMq0C,WAEnE,IAAGn3C,EAAEs2B,OAAO,EAAE,KAAO,KAAM,MAC3B,IAAGvI,KAAKilB,IAAK,KAAM,IAAIp2C,OAAMoD,IAGtC,MAAOya,GAGR,GAAI48B,qBAAsBtS,UAAU,aAAc,MACjD6N,MAASxN,MAAM2R,WACfJ,WAAYvR,MAAMM,IAGnB,SAAS4R,kBAAiBnhB,GAAIpI,MAC7B,GAAIxxB,IAAK4oC,WAAYkS,oBACrB,KAAIlhB,GAAI,MAAO55B,GAAE0Q,KAAK,GACtB,IAAIsqC,KAAM,CACV7W,MAAKvK,IAAIuO,QAAQ,QAAS8S,UAAS/nC,KAAO8nC,GACzCh7C,GAAEA,EAAEO,QAAWioC,UAAU,WAAYG,SAAS/O,GAAG1mB,KAChDgoC,MAAS,yCACTF,IAAOA,IACPlwC,KAAQoI,KAGV,IAAGlT,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,eAAiBP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KACtE,MAAO1B,GAAE0Q,KAAK,IAGf,GAAIyqC,QACH,EAAM,KACN36C,EAAK,MACLsB,EAAK,MACLs5C,GAAK,IACLC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAO,IACPC,IAAM,KACN9M,IAAM,KACN+M,GAAM,KAIP,IAAIC,UAAW,QAAUC,oBACxB,GAAIC,QAAS9U,SAAS,KAAM+U,QAAU/U,SAAS,OAAQgV,OAAS,OAAQC,KAAO,QAASC,QAAU,OAElG,IAAIC,WAAY,QAASA,WAAUC,IAAKC,MAAOC,OAC9C,GAAIC,SAAWnjB,GAAK,KACpB,IAAIpU,GAAIo3B,IAAIt4B,MAAMkhB,UAAWplC,EAAI,CACjC,IAAGolB,EAAG,KAAKplB,GAAGolB,EAAEjlB,SAAUH,EAAG,CAC5B,GAAIsD,GAAIiiC,YAAYngB,EAAEplB,GACtB,QAAOsD,EAAE,IAGR,IAAK,YAAa,KAGlB,KAAK,UAAW,KAGhB,KAAK,UAEL,IAAK,YAAa,KAGlB,KAAK,WACJ,GAAGA,EAAEimB,KAAO,IAAK,KACjBiQ,IAAKuhB,MAAM7a,SAAS58B,EAAEimB,IAAK,IAC3B,MAGD,KAAK,WAEL,IAAK,aAAc,KAGnB,KAAK,SAAUozB,KAAKjyC,KAAOpH,EAAEimB,GAAK,MAGlC,KAAK,MAAOozB,KAAKlR,GAAKnoC,EAAEimB,GAAK,MAG7B,KAAK,UACJ,IAAIjmB,EAAEimB,IAAK,KAEZ,KAAK,YAAaozB,KAAKC,OAAS,CAAG,MACnC,KAAK,YAAa,KAGlB,KAAK,KACJ,IAAIt5C,EAAEimB,IAAK,KAEZ,KAAK,OAAQozB,KAAK98C,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,KACJ,IAAIyD,EAAEimB,IAAK,KAEZ,KAAK,OAAQozB,KAAKp5C,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,KACJ,IAAID,EAAEimB,IAAK,KAEZ,KAAK,OAAQozB,KAAK38C,EAAI,CAAG,MACzB,KAAK,OAAQ,KAGb,KAAK,SACJ,GAAGsD,EAAEu5C,IAAKF,KAAKG,MAAQx5C,EAAEu5C,IAAIljB,OAAO,EAAE,EACtC,MAGD,KAAK,UAAWgjB,KAAKI,OAASz5C,EAAEimB,GAAK,MAGrC,KAAK,aAAc,KAGnB,KAAK,UAAW,KAEhB,SACC,GAAGjmB,EAAE,GAAGpC,WAAW,KAAO,GAAI,KAAM,4BAA8BoC,EAAE,IAIvE,GAAIozC,SACJ,IAAGiG,KAAKp5C,EAAGmzC,MAAM1oC,KAAK,qBACtB,IAAG2uC,KAAK38C,EAAG02C,MAAM1oC,KAAK,sBACtByuC,OAAMzuC,KAAK,gBAAkB0oC,MAAMpmC,KAAK,IAAM,KAC9CosC,OAAM1uC,KAAK,UACX,OAAOwrB,IAIR,SAASwjB,SAAQt9C,GAChB,GAAIu9C,WAAY,MAEhB,IAAIz9C,GAAIE,EAAEwkB,MAAMg4B,QAAS1iB,GAAK,KAC9B,KAAIsK,MAAMtkC,GAAI,MAAO,EACrBy9C,OAAM,GAAKz9C,EAAE,EAEb,IAAIg9C,KAAM98C,EAAEwkB,MAAMi4B,QAClB,IAAGrY,MAAM0Y,KAAMhjB,GAAK+iB,UAAUC,IAAI,GAAIS,MAAM,GAAIA,MAAM,GAEtD,OAAOA,OAAM,GAAG3sC,KAAK,IAAM2sC,MAAM,GAAG37C,QAAQg7C,QAAQ,SAAWW,MAAM,GAAG3sC,KAAK,IAE9E,MAAO,SAAS0rC,UAASkB,IACxB,MAAOA,IAAG57C,QAAQ86C,OAAO,IAAI/V,MAAMgW,MAAMlU,IAAI6U,SAAS1sC,KAAK,OAK7D,IAAI6sC,UAAW,wBAAyBC,SAAW,KACnD,SAASC,UAASh6C,EAAG+tB,MACpB,GAAIksB,MAAOlsB,KAAOA,KAAKmsB,SAAW,IAClC,IAAI7X,KACJ,KAAIriC,EAAG,MAAO,KACd,IAAIC,EAEJ,IAAGD,EAAEnC,WAAW,KAAO,IAAK,CAC3BwkC,EAAElmC,EAAIqnC,SAASL,YAAYnjC,EAAEs2B,OAAOt2B,EAAE9B,QAAQ,KAAK,GAAG8kC,MAAM,SAAS,IACrEX,GAAEhmC,EAAI2D,CACN,IAAGi6C,KAAM5X,EAAEpP,EAAIoP,EAAElmC,MAGb,IAAI8D,EAAID,EAAE6gB,MAAMk5B,UAAY,CAChC1X,EAAEhmC,EAAI2D,CACNqiC,GAAElmC,EAAIqnC,SAASL,YAAYnjC,EAAE6gB,MAAMi5B,UAAU7sC,KAAK,IAAIhP,QAAQ8jC,SAAS,KACvE,IAAGkY,KAAM5X,EAAEpP,EAAI0lB,SAAS34C,GAIzB,MAAOqiC,GAIR,GAAI8X,OAAQ,8BACZ,IAAIC,OAAQ,mBACZ,IAAIC,OAAQ,oBACZ,SAASC,eAAc/5C,KAAMwtB,MAC5B,GAAIzxB,MAAQ8+B,EAEZ,IAAIgY,KAAM7yC,KAAKsgB,MAAMs5B,MACrB,IAAG1Z,MAAM2S,KAAM,CACdhY,GAAKgY,IAAI,GAAGn1C,QAAQm8C,MAAM,IAAIpX,MAAMqX,MACpC,KAAI,GAAI19C,GAAI,EAAGA,GAAKy+B,GAAGt+B,SAAUH,EAAG,CACnC,GAAIJ,GAAIy9C,SAAS5e,GAAGz+B,GAAIoxB,KACxB,IAAGxxB,GAAK,KAAMD,EAAEA,EAAEQ,QAAUP,EAE7B62C,IAAMlR,YAAYkR,IAAI,GAAK92C,GAAEi+C,MAAQnH,IAAI5jB,KAAOlzB,GAAEk+C,OAASpH,IAAIqH,YAEhE,MAAOn+C,GAGRy3C,KAAK2G,IAAM,mFACX,IAAIC,cAAe,kBACnB,SAASC,eAAcxH,IAAKrlB,MAC3B,IAAIA,KAAK8sB,QAAS,MAAO,EACzB,IAAIt+C,IAAK4oC,WACT5oC,GAAEA,EAAEO,QAAWioC,UAAU,MAAO,MAC/B6N,MAAOxN,MAAMS,KAAK,GAClBrW,MAAO4jB,IAAImH,MACXE,YAAarH,IAAIoH,QAElB,KAAI,GAAI79C,GAAI,EAAGA,GAAKy2C,IAAIt2C,SAAUH,EAAG,CAAE,GAAGy2C,IAAIz2C,IAAM,KAAM,QACzD,IAAIL,GAAI82C,IAAIz2C,EACZ,IAAIm+C,OAAQ,MACZ,IAAGx+C,EAAED,EAAGy+C,OAASx+C,EAAED,MACd,CACJy+C,OAAS,IACT,IAAGx+C,EAAEH,EAAE0kB,MAAM85B,cAAeG,OAAS,uBACrCA,QAAS,IAAMxX,UAAUhnC,EAAEH,GAAK,OAEjC2+C,OAAS,OACTv+C,GAAEA,EAAEO,QAAU,MAEf,GAAGP,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,QAAYP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KACjE,MAAO1B,GAAE0Q,KAAK,IAGf,QAAS8tC,mBAAkBx6C,KAAMzD,QAChC,OAAQyD,KAAKwnC,WAAW,GAAIxnC,KAAKwnC,WAAW,IAI7C,QAASiT,eAAcz6C,KAAMwtB,MAC5B,GAAIzxB,KACJ,IAAI2+C,MAAO,KACX5S,cAAa9nC,KAAM,QAAS26C,YAAWh1B,IAAKwiB,EAAGD,IAC9C,OAAOC,EAAEtsC,GACR,IAAK,cAAeE,EAAEi+C,MAAQr0B,IAAI,EAAI5pB,GAAEk+C,OAASt0B,IAAI,EAAI,MACzD,KAAK,aAAc5pB,EAAEqO,KAAKub,IAAM,MAChC,KAAK,YAAa,MAAO,KAEzB,KAAK,cAAe+0B,KAAO,IAAM,MACjC,KAAK,YAAaA,KAAO,KAAO,MAChC,SAAS,IAAIA,MAAQltB,KAAKilB,IAAK,KAAM,IAAIp2C,OAAM,qBAAuB6rC,GAAK,IAAMC,EAAEtsC,KAGrF,OAAOE,GAGR,QAAS6+C,mBAAkB/H,IAAK72C,GAC/B,IAAIA,EAAGA,EAAI4rC,QAAQ,EACnB5rC,GAAEyrC,YAAY,EAAGoL,IAAImH,MACrBh+C,GAAEyrC,YAAY,EAAGoL,IAAIoH,OACrB,OAAOj+C,GAGR,GAAI6+C,kBAAmBlR,aAEvB,SAASmR,eAAcjI,IAAKrlB,MAC3B,GAAIyb,IAAKZ,WACTW,cAAaC,GAAI,cAAe2R,kBAAkB/H,KAClD,KAAI,GAAIz2C,GAAI,EAAGA,EAAIy2C,IAAIt2C,SAAUH,EAAG4sC,aAAaC,GAAI,aAAc4R,iBAAiBhI,IAAIz2C,IACxF4sC,cAAaC,GAAI,YACjB,OAAOA,IAAGhsB,MAEX,QAAS89B,SAAQroB,GAChB,GAAI12B,GAAI02B,EAAEqD,OAAOrD,EAAE,KAAK,IAAI,EAAE,EAAE,EAChC,QAAQ4J,SAAStgC,EAAE+5B,OAAO,EAAE,GAAG,IAAIuG,SAAStgC,EAAE+5B,OAAO,EAAE,GAAG,IAAIuG,SAAStgC,EAAE+5B,OAAO,EAAE,GAAG,KAEtF,QAASilB,SAAQ/B,KAChB,IAAI,GAAI78C,GAAE,EAAEJ,EAAE,EAAGI,GAAG,IAAKA,EAAGJ,EAAIA,EAAE,KAAOi9C,IAAI78C,GAAG,IAAI,IAAI68C,IAAI78C,GAAG,EAAE,EAAE68C,IAAI78C,GACvE,OAAOJ,GAAEiT,SAAS,IAAIpH,cAAckuB,OAAO,GAG5C,QAASklB,SAAQhC,KAChB,GAAI9Q,GAAI8Q,IAAI,GAAG,IAAKiC,EAAIjC,IAAI,GAAG,IAAKlhB,EAAEkhB,IAAI,GAAG,GAC7C,IAAI5e,GAAIhrB,KAAKX,IAAIy5B,EAAG+S,EAAGnjB,GAAIvW,EAAInS,KAAKC,IAAI64B,EAAG+S,EAAGnjB,GAAIojB,EAAI9gB,EAAI7Y,CAC1D,IAAG25B,IAAM,EAAG,OAAQ,EAAG,EAAGhT,EAE1B,IAAIiT,IAAK,EAAG9gB,EAAI,EAAG+gB,GAAMhhB,EAAI7Y,CAC7B8Y,GAAI6gB,GAAKE,GAAK,EAAI,EAAIA,GAAKA,GAC3B,QAAOhhB,GACN,IAAK8N,GAAGiT,KAAOF,EAAInjB,GAAKojB,EAAI,GAAG,CAAG,MAClC,KAAKD,GAAGE,IAAOrjB,EAAIoQ,GAAKgT,EAAI,CAAI,MAChC,KAAKpjB,GAAGqjB,IAAOjT,EAAI+S,GAAKC,EAAI,CAAI,OAEjC,OAAQC,GAAK,EAAG9gB,EAAG+gB,GAAK,GAGzB,QAASC,SAAQC,KAChB,GAAInhB,GAAImhB,IAAI,GAAIjhB,EAAIihB,IAAI,GAAIC,EAAID,IAAI,EACpC,IAAIJ,GAAI7gB,EAAI,GAAKkhB,EAAI,GAAMA,EAAI,EAAIA,GAAIh6B,EAAIg6B,EAAIL,EAAE,CACjD,IAAIlC,MAAOz3B,EAAEA,EAAEA,GAAIi6B,GAAK,EAAErhB,CAE1B,IAAIshB,EACJ,IAAGphB,IAAM,EAAG,OAAOmhB,GAAG,GACrB,IAAK,GAAG,IAAK,GAAGC,EAAIP,EAAIM,EAAIxC,KAAI,IAAMkC,CAAGlC,KAAI,IAAMyC,CAAG,MACtD,KAAK,GAAGA,EAAIP,GAAK,EAAIM,GAAOxC,KAAI,IAAMyC,CAAGzC,KAAI,IAAMkC,CAAG,MACtD,KAAK,GAAGO,EAAIP,GAAKM,GAAK,EAAMxC,KAAI,IAAMkC,CAAGlC,KAAI,IAAMyC,CAAG,MACtD,KAAK,GAAGA,EAAIP,GAAK,EAAIM,GAAOxC,KAAI,IAAMyC,CAAGzC,KAAI,IAAMkC,CAAG,MACtD,KAAK,GAAGO,EAAIP,GAAKM,GAAK,EAAMxC,KAAI,IAAMkC,CAAGlC,KAAI,IAAMyC,CAAG,MACtD,KAAK,GAAGA,EAAIP,GAAK,EAAIM,GAAOxC,KAAI,IAAMyC,CAAGzC,KAAI,IAAMkC,CAAG,OAEvD,IAAI,GAAI/+C,GAAI,EAAGA,GAAK,IAAKA,EAAG68C,IAAI78C,GAAKiT,KAAKmnB,MAAMyiB,IAAI78C,GAAG,IACvD,OAAO68C,KAIR,QAAS0C,UAASp0C,IAAKq0C,MACtB,GAAGA,OAAS,EAAG,MAAOr0C,IACtB,IAAIg0C,KAAMN,QAAQF,QAAQxzC,KAC1B,IAAIq0C,KAAO,EAAGL,IAAI,GAAKA,IAAI,IAAM,EAAIK,UAChCL,KAAI,GAAK,GAAK,EAAIA,IAAI,KAAO,EAAIK,KACtC,OAAOZ,SAAQM,QAAQC,MAIxB,GAAIM,SAAU,EAAGC,QAAU,GAAIC,QAAU,EAAGC,IAAMH,OAClD,SAASI,UAASC,OAAS,OAAUA,OAAU,IAAIF,IAAK,GAAG,KAAOA,IAAM,EACxE,QAASG,SAAQC,IAAM,QAAUA,GAAK,GAAGJ,IAAM,IAAM,GAAK,GAAG,IAC7D,QAASK,YAAWC,KAAO,QAAUA,IAAMN,IAAM,GAAGA,IAAI,IAAK,GAAG,IAChE,QAASO,aAAYC,OAAS,MAAOH,YAAWF,QAAQF,SAASO,SACjE,QAASC,UAASD,MAAOE,MACxB,GAAGH,YAAYC,QAAUA,MAAO,CAC/B,IAAIR,IAAIH,QAASG,IAAID,UAAWC,IAAK,GAAGO,YAAYC,SAAWA,MAAO,KACtE,IAAGR,MAAQD,QAAS,IAAIC,IAAIH,QAAQ,EAAGG,IAAIF,UAAWE,IAAK,GAAGO,YAAYC,SAAWA,MAAO,KAC5F,IAAGR,MAAQF,QAASE,IAAMH,SAG5B,GAAIvK,UAEJ,IAAIO,UAGJ,SAAS8K,aAAY/gD,EAAG4xB,MACvB8jB,OAAOsL,QACP,IAAIhuB,QACJhzB,GAAE,GAAG0kB,MAAMkhB,UAAU2C,QAAQ,SAAS1kC,GACrC,GAAIC,GAAIiiC,YAAYliC,EACpB,QAAOC,EAAE,IACR,IAAK,SAAU,IAAK,UAAW,IAAK,WAAY,KAGhD,KAAK,SAAU,KACf,KAAK,UAAW4xC,OAAOsL,MAAMxyC,KAAKwkB,KAAOA,QAAW,MAGpD,KAAK,eACJ,GAAGlvB,EAAEm9C,YAAajuB,KAAKiuB,YAAcn9C,EAAEm9C,WACvC,MACD,KAAK,iBAAkB,IAAK,iBAAkB,KAG9C,KAAK,WACJ,IAAIjuB,KAAKkuB,QAASluB,KAAKkuB,UACvB,IAAGp9C,EAAEq9C,QAASnuB,KAAKkuB,QAAQC,QAAUzgB,SAAS58B,EAAEq9C,QAAS,GACzD,IAAGr9C,EAAEs9C,MAAOpuB,KAAKkuB,QAAQE,MAAQ1gB,SAAS58B,EAAEs9C,MAAO,GACnD,IAAGt9C,EAAEk8C,KAAMhtB,KAAKkuB,QAAQlB,KAAOrc,WAAW7/B,EAAEk8C,KAE5C,IAAGl8C,EAAEu5C,IAAKrqB,KAAKkuB,QAAQ7D,IAAMv5C,EAAEu5C,IAAI7wC,UAAU1I,EAAEu5C,IAAI18C,OAAS,EAC5D,MACD,KAAK,aAAc,IAAK,aAAc,KAGtC,KAAK,WACJ,IAAIqyB,KAAKquB,QAASruB,KAAKquB,UACvB,IAAGv9C,EAAEs9C,MAAOpuB,KAAKquB,QAAQD,MAAQ1gB,SAAS58B,EAAEs9C,MAAO,GACnD,IAAGt9C,EAAEk8C,KAAMhtB,KAAKquB,QAAQrB,KAAOrc,WAAW7/B,EAAEk8C,KAE5C,IAAGl8C,EAAEu5C,IAAKrqB,KAAKquB,QAAQhE,IAAMv5C,EAAEu5C,IAAI7wC,UAAU1I,EAAEu5C,IAAI18C,OAAS,EAC5D,MACD,KAAK,aAAc,IAAK,aAAc,KAEtC,SAAS,GAAGixB,KAAKilB,IAAK,KAAM,gBAAkB/yC,EAAE,GAAK,eAMxD,QAASw9C,eAActhD,EAAG4xB,MACzB8jB,OAAO6L,YACP,IAAIjuC,GAAIixB,KAAKnK,IAAI6J,OACjB,KAAI,GAAIzjC,GAAE,EAAGA,EAAI8S,EAAE3S,SAAUH,EAAGk1C,OAAO6L,UAAUjuC,EAAE9S,IAAM45B,IAAI6J,OAAO3wB,EAAE9S,GACtE,IAAIolB,GAAI5lB,EAAE,GAAG0kB,MAAMkhB,SACnB,KAAIplC,EAAE,EAAGA,EAAIolB,EAAEjlB,SAAUH,EAAG,CAC3B,GAAIsD,GAAIiiC,YAAYngB,EAAEplB,GACtB,QAAOsD,EAAE,IACR,IAAK,WAAY,IAAK,aAAc,IAAK,aAAc,IAAK,YAAa,KACzE,KAAK,UAAW,CACf,GAAInE,GAAEqnC,YAAYK,SAASvjC,EAAE09C,aAAc5pB,EAAE8I,SAAS58B,EAAE29C,SAAS,GACjE/L,QAAO6L,UAAU3pB,GAAKj4B,CAAG,IAAGi4B,EAAE,EAAGwC,IAAItyB,KAAKnI,EAAEi4B,GAC3C,KACF,SAAS,GAAGhG,KAAKilB,IAAK,KAAM,gBAAkB/yC,EAAE,GAAK,gBAKxD,QAAS49C,eAAcC,GAAI/vB,MAC1B,GAAIxxB,IAAK,eACP,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,MAAMmoC,QAAQ,SAASroC,GAC1D,IAAI,GAAIM,GAAIN,EAAE,GAAIM,GAAKN,EAAE,KAAMM,EAAG,GAAGmhD,GAAGnhD,KAAOkJ,UAAWtJ,EAAEA,EAAEO,QAAWioC,UAAU,SAAS,MAAM6Y,SAASjhD,EAAEghD,WAAWra,UAAUwa,GAAGnhD,OAEtI,IAAGJ,EAAEO,SAAW,EAAG,MAAO,EAC1BP,GAAEA,EAAEO,QAAU,YACdP,GAAE,GAAKwoC,UAAU,UAAW,MAAQvV,MAAMjzB,EAAEO,OAAO,IAAKmB,QAAQ,KAAM,IACtE,OAAO1B,GAAE0Q,KAAK,IAIf,QAAS8wC,eAAc5hD,EAAG4xB,MACzB8jB,OAAOmM,SACP7hD,GAAE,GAAG0kB,MAAMkhB,UAAU2C,QAAQ,SAAS1kC,GACrC,GAAIC,GAAIiiC,YAAYliC,EACpB,QAAOC,EAAE,IACR,IAAK,WAAY,IAAK,YAAa,IAAK,aAAc,IAAK,aAAc,KAGzE,KAAK,YAAcA,GAAE,EACpB,IAAGA,EAAE29C,SAAU39C,EAAE29C,SAAW/gB,SAAS58B,EAAE29C,SAAU,GACjD,IAAG39C,EAAEg+C,OAAQh+C,EAAEg+C,OAASphB,SAAS58B,EAAEg+C,OAAQ,GAC3CpM,QAAOmM,OAAOrzC,KAAK1K,EAAI,MACxB,KAAK,QAAS,KAGd,KAAK,aAAc,IAAK,eAAgB,KAGxC,KAAK,cAAe,IAAK,gBAAiB,IAAK,gBAAiB,KAEhE,KAAK,UAAW,IAAK,YAAa,KAClC,KAAK,OAAQ,KACb,SAAS,GAAG8tB,KAAKilB,IAAK,KAAM,gBAAkB/yC,EAAE,GAAK,iBAKxD,QAASi+C,eAAcC,SACtB,GAAI5hD,KACJA,GAAEA,EAAEO,QAAWioC,UAAU,UAAU,KACnCoZ,SAAQzZ,QAAQ,SAAS/1B,GAAKpS,EAAEA,EAAEO,QAAWioC,UAAU,KAAM,KAAMp2B,IACnEpS,GAAEA,EAAEO,QAAU,YACd,IAAGP,EAAEO,SAAW,EAAG,MAAO,EAC1BP,GAAE,GAAKwoC,UAAU,UAAU,MAAOvV,MAAMjzB,EAAEO,OAAO,IAAImB,QAAQ,KAAK,IAClE,OAAO1B,GAAE0Q,KAAK,IAIf,GAAImxC,eAAe,QAAUC,cAC7B,GAAIC,aAAc,+BAClB,IAAIC,aAAc,+BAClB,IAAIC,YAAa,2BAEjB,OAAO,SAASJ,eAAc79C,KAAMwtB,MAEnC,GAAI5xB,EAGJ,IAAIA,EAAEoE,KAAKsgB,MAAMy9B,aAAeb,cAActhD,EAAG4xB,KAMjD,IAAI5xB,EAAEoE,KAAKsgB,MAAM29B,YAActB,YAAY/gD,EAAG4xB,KAM9C,IAAI5xB,EAAEoE,KAAKsgB,MAAM09B,aAAeR,cAAc5hD,EAAG4xB,KAOjD,OAAO8jB,WAIR,IAAI4M,iBAAkB1Z,UAAU,aAAc,MAC7C6N,MAASxN,MAAMS,KAAK,GACpB8Q,WAAYvR,MAAMM,IAGnBqO,MAAK2K,IAAM,4EAEX,SAASC,eAAcC,GAAI7wB,MAC1B,GAAIxxB,IAAK4oC,WAAYsZ,iBAAkBjsB,CACvC,KAAIA,EAAIqrB,cAAce,GAAGroB,OAAS,KAAMh6B,EAAEA,EAAEO,QAAU01B,CACtDj2B,GAAEA,EAAEO,QAAU,mIACdP,GAAEA,EAAEO,QAAU,0HACdP,GAAEA,EAAEO,QAAU,yFACdP,GAAEA,EAAEO,QAAU,8FACd,IAAI01B,EAAI0rB,cAAcnwB,KAAKowB,SAAW5hD,EAAEA,EAAEO,QAAU,CACpDP,GAAEA,EAAEO,QAAU,sFACdP,GAAEA,EAAEO,QAAU,mBACdP,GAAEA,EAAEO,QAAU,sGAEd,IAAGP,EAAEO,OAAO,EAAE,CAAEP,EAAEA,EAAEO,QAAU,eAAmBP,GAAE,GAAGA,EAAE,GAAG0B,QAAQ,KAAK,KACxE,MAAO1B,GAAE0Q,KAAK,IAGf,QAAS4xC,cAAat+C,KAAMzD,QAC3B,GAAIgiD,MAAOv+C,KAAKwnC,WAAW,EAC3B,IAAIgX,WAAYhV,mBAAmBxpC,KAAKzD,OAAO,EAC/C,QAAQgiD,KAAMC,WAIf,QAASC,eAAcz+C,KAAMzD,QAC5B,GAAImK,MAAO4kB,SACX5kB,KAAIg4C,SAAW1+C,KAAKwnC,WAAW,EAC/B9gC,KAAIi4C,MAAQ7S,gBAAgB9rC,KAAM,EAClC0G,KAAIk4C,IAAM5+C,KAAKwnC,WAAW,EAC1B9gC,KAAIm4C,IAAM7+C,KAAKwnC,WAAW,EAC1B9gC,KAAIo4C,IAAM9+C,KAAKwnC,WAAW,EAC1B9gC,KAAIq4C,QAAU/+C,KAAKwnC,WAAW,EAC9B9gC,KAAIs4C,SAAWh/C,KAAKwnC,WAAW,EAC/BxnC,MAAKwa,GACL9T,KAAIu4C,SAAW3T,eAAetrC,KAAM,EACpC0G,KAAIw4C,YAAcl/C,KAAKwnC,WAAW,EAClC9gC,KAAII,KAAO0iC,mBAAmBxpC,KAAMzD,OAAS,GAE7CmK,KAAI4kB,MAAM6zB,KAAOz4C,IAAIk4C,MAAQ,GAC7Bl4C,KAAI4kB,MAAM8zB,OAAS14C,IAAIi4C,MAAM5S,OAC7BrlC,KAAI4kB,MAAM+zB,UAAY34C,IAAIi4C,MAAM3S,UAChCtlC,KAAI4kB,MAAMg0B,QAAU54C,IAAIi4C,MAAM1S,QAC9BvlC,KAAI4kB,MAAMi0B,OAAS74C,IAAIi4C,MAAMzS,OAC7BxlC,KAAI4kB,MAAMk0B,SAAW94C,IAAIi4C,MAAMxS,SAC/BzlC,KAAI4kB,MAAMm0B,OAAS/4C,IAAIi4C,MAAMvS,OAC7B1lC,KAAI4kB,MAAMo0B,IAAMh5C,IAAIm4C,IAAM,CAC1Bn4C,KAAI4kB,MAAMq0B,IAAMj5C,IAAIm4C,IAAM,CAC1B,OAAOn4C,KAIR,QAASk5C,aAAY5/C,KAAMzD,QAC1B,GAAIsjD,YAAa7/C,KAAKwnC,WAAW,EACjC,IAAI+W,MAAOv+C,KAAKwnC,WAAW,EAC3BE,WAAU1nC,KAAMzD,OAAO,EACvB,QAAQujD,KAAKD,WAAYtB,KAAKA,MAI/B,QAASwB,eAAc//C,KAAMwtB,MAC5B8jB,OAAO6L,YACP,KAAI,GAAIz9C,KAAKs2B,KAAI6J,OAAQyR,OAAO6L,UAAUz9C,GAAKs2B,IAAI6J,OAAOngC,EAE1D4xC,QAAOmM,SACP,IAAIv+B,OAAQ,EACZ,IAAIw7B,MAAO,KACX5S,cAAa9nC,KAAM,QAASggD,YAAWr6B,IAAKwiB,EAAGD,IAC9C,OAAOC,EAAEtsC,GACR,IAAK,SACJy1C,OAAO6L,UAAUx3B,IAAI,IAAMA,IAAI,EAAIqQ,KAAItyB,KAAKiiB,IAAI,GAAIA,IAAI,GACxD,MACD,KAAK,UAAW,KAChB,KAAK,gBAAiB,KACtB,KAAK,UAAW,KAChB,KAAK,YAAa,KAClB,KAAK,QACJ,GAAGzG,QAAU,UAAW,CACvBoyB,OAAOmM,OAAOrzC,KAAKub,KAEpB,KACD,KAAK,WAAY,KACjB,KAAK,SAAU,KACf,KAAK,cAAe,KACpB,KAAK,kBAAmB,KACxB,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,KAAK,qBAAsB,KAC3B,KAAK,uBAAwB,KAC7B,KAAK,mBAAoB,KACzB,KAAK,eAAgBzG,MAAQ,MAAQ,MACrC,KAAK,aAAcA,MAAQ,EAAI,MAC/B,KAAK,gBAAiBA,MAAQ,OAAS,MACvC,KAAK,cAAeA,MAAQ,EAAI,MAChC,KAAK,aAAcA,MAAQ,SAAW,MACtC,KAAK,WAAYA,MAAQ,EAAI,MAC7B,KAAK,gBAAiBA,MAAQ,OAAS,MACvC,KAAK,cAAeA,MAAQ,EAAI,MAChC,KAAK,kBAAmBA,MAAQ,SAAW,MAC3C,KAAK,gBAAiBA,MAAQ,EAAI,MAClC,KAAK,uBAAwBA,MAAQ,cAAgB,MACrD,KAAK,qBAAsBA,MAAQ,EAAI,MACvC,KAAK,kBAAmBA,MAAQ,SAAW,MAC3C,KAAK,gBAAiBA,MAAQ,EAAI,MAClC,KAAK,iBAAkBA,MAAQ,QAAU,MACzC,KAAK,eAAgBA,MAAQ,EAAI,MACjC,KAAK,eAAgBA,MAAQ,MAAQ,MACrC,KAAK,aAAcA,MAAQ,EAAI,MAC/B,KAAK,sBAAuBA,MAAQ,aAAe,MACnD,KAAK,oBAAqBA,MAAQ,EAAI,MACtC,KAAK,uBAAwBA,MAAQ,cAAgB,MACrD,KAAK,qBAAsBA,MAAQ,EAAI,MACvC,KAAK,wBAAyBA,MAAQ,eAAiB,MACvD,KAAK,sBAAuBA,MAAQ,EAAI,MACxC,KAAK,oBAAqBA,MAAQ,WAAa,MAC/C,KAAK,kBAAmBA,MAAQ,EAAI,MACpC,KAAK,cAAew7B,KAAO,IAAM,MACjC,KAAK,YAAaA,KAAO,KAAO,MAChC,KAAK,0BAA2B,KAChC,KAAK,uBAAwB,KAC7B,KAAK,qBAAsB,KAC3B,KAAK,kCAAmC,KACxC,KAAK,gCAAiC,KACtC,KAAK,yBAA0B,KAC/B,KAAK,uBAAwB,KAC7B,KAAK,wBAAyB,KAC9B,SAAS,IAAIA,MAAQltB,KAAKilB,IAAK,KAAM,IAAIp2C,OAAM,qBAAuB6rC,GAAK,IAAMC,EAAEtsC,KAGrF,OAAOy1C,QAIR,QAAS2O,eAAcjgD,KAAMwtB,MAC5B,GAAIyb,IAAKZ,WACTW,cAAaC,GAAI,qBAYjBD,cAAaC,GAAI,mBACjB,OAAOA,IAAGhsB,MAEXu2B,KAAK0M,MAAQ,2EAGb,SAASC,iBAAgBvkD,EAAG4xB,MAC3BqkB,OAAOuO,cAAcC,YACrB,IAAInH,SACJt9C,GAAE,GAAG0kB,MAAMkhB,UAAU2C,QAAQ,SAAS1kC,GACrC,GAAIC,GAAIiiC,YAAYliC,EACpB,QAAOC,EAAE,IACR,IAAK,eAAgB,IAAK,iBAAkB,KAG5C,KAAK,aAAcw5C,MAAMD,IAAMv5C,EAAEimB,GAAK,MAGtC,KAAK,YAAauzB,MAAMD,IAAMv5C,EAAE4gD,OAAS,MAGzC,KAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,UACL,IAAK,WAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,cACL,IAAK,eAEL,IAAK,YACL,IAAK,aAEL,IAAK,eACL,IAAK,gBACJ,GAAI5gD,EAAE,GAAG,KAAO,IAAK,CACpBmyC,OAAOuO,cAAcC,UAAUj2C,KAAK8uC,MACpCA,cACM,CACNA,MAAMpyC,KAAOpH,EAAE,GAAG0I,UAAU,EAAG1I,EAAE,GAAGnD,OAAS,GAE9C,KAED,SAAS,GAAGixB,KAAKilB,IAAK,KAAM,gBAAkB/yC,EAAE,GAAK,mBAMxD,QAAS6gD,kBAAiB3kD,EAAG4xB,OAG7B,QAASgzB,iBAAgB5kD,EAAG4xB,OAE5B,GAAIizB,WAAY,+CAChB,IAAIC,WAAY,iDAChB,IAAIC,WAAY,+CAGhB,SAASC,qBAAoB5gD,KAAMwtB,MAClCqkB,OAAOuO,gBAEP,IAAIxkD,KAIF,YAAa6kD,UAAWN,kBAExB,aAAcO,UAAWH,mBAEzB,YAAaI,UAAWH,kBACxBrc,QAAQ,SAAS3iB,GAClB,KAAK5lB,EAAEoE,KAAKsgB,MAAMkB,EAAE,KAAM,KAAMA,GAAE,GAAK,6BACvCA,GAAE,GAAG5lB,EAAG4xB,QAIV,GAAIqzB,cAAe,uDAGnB,SAASC,iBAAgB9gD,KAAMwtB,MAE9B,IAAIxtB,MAAQA,KAAKzD,SAAW,EAAG,MAAOs1C,OAEtC,IAAIj2C,EAGJ,MAAKA,EAAEoE,KAAKsgB,MAAMugC,eAAgB,KAAM,kCACxCD,qBAAoBhlD,EAAE,GAAI4xB,KAE1B,OAAOqkB,QAGR,QAASkP,eAAgB,MAAO,65OAEhC,QAASC,cAAahhD,KAAMwtB,MAC3B,GAAI4I,KACJ,IAAI5b,GAAI,EAAGpe,EAAI,GACd4D,KAAKsgB,MAAMkhB,eAAe2C,QAAQ,SAAS1kC,GAC3C,GAAIC,GAAIiiC,YAAYliC,EACpB,QAAOC,EAAE,IACR,IAAK,QAAS,KAEd,KAAK,aAAc,IAAK,cAAe,IAAK,eAAgB,KAE5D,KAAK,WAAaA,GAAE,EAAI,IAAGA,EAAEtD,EAAGA,EAAIsD,EAAEtD,MAAQsD,GAAEtD,EAAIA,CAAGg6B,GAAEhsB,KAAK1K,EAAI,SAGpE,OAAO02B,GAGR,QAAS6qB,cAAajhD,KAAMwtB,OAE5B,QAAS0zB,yBAAwBlhD,KAAMzD,QACtC,GAAImK,OACJA,KAAItK,EAAI4D,KAAKwnC,WAAW,EACxB,IAAI0C,QACJA,MAAKpuC,EAAIkE,KAAKwnC,WAAW,EACzB0C,MAAK97B,EAAIpO,KAAKwnC,WAAW,EACzB9gC,KAAI5K,EAAIqlD,YAAYjX,KACpB,IAAI5e,OAAQtrB,KAAKwnC,WAAW,EAC5B,IAAGlc,MAAQ,EAAK5kB,IAAI8T,EAAI,GACxB,IAAG8Q,MAAQ,EAAK5kB,IAAIxK,EAAI,GACxB,OAAOwK,KAIR,QAAS06C,cAAaphD,KAAMwtB,MAC3B,GAAI9mB,OACJ,IAAIg0C,MAAO,KACX5S,cAAa9nC,KAAM,QAASqhD,WAAU17B,IAAKwiB,EAAGD,IAC7C,OAAOC,EAAEtsC,GACR,IAAK,oBAAqB6K,IAAI0D,KAAKub,IAAM,MACzC,KAAK,qBAAsB,KAC3B,KAAK,mBAAoB,KACzB,SAAS,IAAI+0B,MAAQltB,KAAKilB,IAAK,KAAM,IAAIp2C,OAAM,qBAAuB6rC,GAAK,IAAMC,EAAEtsC,KAGrF,OAAO6K,KAGR,QAAS46C,cAAathD,KAAMwtB,OAE5B,QAAS+zB,gBAAe/1C,IAAKg2C,YAAanQ,OAAQoQ,UAAWj0B,MAC5D,IAAI,GAAIpxB,GAAI,EAAGA,GAAKolD,YAAYjlD,SAAUH,EAAG,CAC5C,GAAIslD,eAAcF,YAAYplD,EAC9B,IAAI61C,UAAS0P,WAAWxgB,WAAW31B,IAAKk2C,cAAchkD,QAAQ,MAAM,IAAK,MAAOgkD,cAAel0B,KAC/F,KAAIykB,WAAaA,SAAS11C,OAAQ,QAElC,IAAIqlD,YAAazhB,KAAKkR,OACtB,KAAI,GAAI7d,GAAI,EAAGA,GAAKouB,WAAWrlD,SAAUi3B,EAAG,CAC3C,GAAIquB,WAAYD,WAAWpuB,EAC3B,IAAI4e,MAAOqP,UAAUI,UACrB,IAAGzP,KAAM,CACR,GAAIgC,KAAMhC,KAAKsP,cACf,IAAGtN,IAAK0N,wBAAwBD,UAAWxQ,OAAOwQ,WAAY5P,aAMlE,QAAS6P,yBAAwBD,UAAWhR,MAAOoB,UAClDA,SAAS9N,QAAQ,SAASxiC,SACzB,GAAIuoC,MAAO2G,MAAMlvC,QAAQogD,IACzB,KAAK7X,KAAM,CACVA,OACA2G,OAAMlvC,QAAQogD,KAAO7X,IACrB,IAAI8X,OAAQC,kBAAkBpR,MAAM,SAAS,kBAC7C,IAAIqR,UAAWC,YAAYxgD,QAAQogD,IACnC,IAAGC,MAAMjmD,EAAED,EAAIomD,SAASpmD,EAAGkmD,MAAMjmD,EAAED,EAAIomD,SAASpmD,CAChD,IAAGkmD,MAAM9mD,EAAEY,EAAIomD,SAASpmD,EAAGkmD,MAAM9mD,EAAEY,EAAIomD,SAASpmD,CAChD,IAAGkmD,MAAMjmD,EAAEqS,EAAI8zC,SAAS9zC,EAAG4zC,MAAMjmD,EAAEqS,EAAI8zC,SAAS9zC,CAChD,IAAG4zC,MAAM9mD,EAAEkT,EAAI8zC,SAAS9zC,EAAG4zC,MAAM9mD,EAAEkT,EAAI8zC,SAAS9zC,CAChD,IAAIg0C,SAAUC,aAAaL,MAC3B,IAAII,UAAYvR,MAAM,QAASA,MAAM,QAAUuR,QAGhD,IAAKlY,KAAK97B,EAAG87B,KAAK97B,IAClB,IAAIpS,IAAKE,EAAGyF,QAAQ2gD,OAAQ1mD,EAAG+F,QAAQ/F,EAAGE,EAAG6F,QAAQ7F,EACrD,IAAG6F,QAAQ+wB,EAAG12B,EAAE02B,EAAI/wB,QAAQ+wB,CAC5BwX,MAAK97B,EAAEhE,KAAKpO,KAKd,QAASumD,oBAAmBviD,KAAMwtB,MACjC,GAAGxtB,KAAKsgB,MAAM,2BAA4B,QAC1C,IAAIkiC,WACJ,IAAIC,eACJziD,MAAKsgB,MAAM,sDAAsD,GAAGmiB,MAAM,mBAAmB0B,QAAQ,SAAS1kC,GAC7G,GAAGA,IAAM,IAAMA,EAAEijD,SAAW,GAAI,MAChCF,SAAQp4C,KAAK3K,EAAE6gB,MAAM,8BAA8B,OAEnDtgB,KAAKsgB,MAAM,gEAAgE,GAAG,KAAK,GAAGmiB,MAAM,oBAAoB0B,QAAQ,SAAS1kC,EAAGQ,OACpI,GAAGR,IAAM,IAAMA,EAAEijD,SAAW,GAAI,MAChC,IAAIhjD,GAAIiiC,YAAYliC,EAAE6gB,MAAM,2BAA2B,GACvD,IAAI3e,UAAY2gD,OAAQ5iD,EAAEijD,UAAYH,QAAQ9iD,EAAEijD,UAAYH,QAAQ9iD,EAAEijD,UAAYr9C,UAAWy8C,IAAKriD,EAAEqiD,IAAKa,KAAMljD,EAAEkjD,KACjH;GAAI1Y,MAAOiY,YAAYziD,EAAEqiD,IACzB,IAAGv0B,KAAKq1B,WAAar1B,KAAKq1B,WAAa3Y,KAAKpuC,EAAG,MAC/C,IAAIgnD,WAAYrjD,EAAE6gB,MAAM,6BACxB,KAAKwiC,YAAcA,UAAU,GAAI,MACjC,IAAIC,IAAKtJ,SAASqJ,UAAU,GAC5BnhD,SAAQ7F,EAAIinD,GAAGjnD,CACf6F,SAAQ/F,EAAImnD,GAAGnnD,CACf,IAAG4xB,KAAKmsB,SAAUh4C,QAAQ+wB,EAAIqwB,GAAGrwB,CACjC+vB,aAAYr4C,KAAKzI,UAElB,OAAO8gD,aAGR,QAASO,oBAAmBhjD,KAAMwtB,OAElC,QAASy1B,uBAAsBjjD,KAAMzD,QACpC,GAAImK,OACJA,KAAIw8C,QAAUljD,KAAKwnC,WAAW,EAC9B,IAAI2b,KAAMtY,mBAAmB7qC,KAAM,GACnC0G,KAAIy8C,IAAMA,IAAIpnD,CACd2K,KAAIq7C,IAAMZ,YAAYgC,IAAIpnD,EAC1BiE,MAAKwa,GAAK,EACV,OAAO9T,KAIR,GAAI08C,wBAAyB5Z,kBAG7B,IAAI6Z,sBAAuB9Z,aAG3B,SAAS+Z,oBAAmBtjD,KAAMwtB,MACjC,GAAI9mB,OACJ,IAAI87C,WACJ,IAAIp0C,KACJ,IAAIssC,MAAO,KACX5S,cAAa9nC,KAAM,QAASujD,aAAY59B,IAAKwiB,EAAGD,IAC/C,OAAOC,EAAEtsC,GACR,IAAK,mBAAoB2mD,QAAQp4C,KAAKub,IAAM,MAC5C,KAAK,kBAAmBvX,EAAIuX,GAAK,MACjC,KAAK,iBAAkBvX,EAAExS,EAAI+pB,IAAI/pB,CAAGwS,GAAEskB,EAAI/M,IAAI+M,CAAGtkB,GAAEtS,EAAI6pB,IAAI7pB,CAAG,MAC9D,KAAK,gBACJsS,EAAEk0C,OAASE,QAAQp0C,EAAE80C,eACd90C,GAAE80C,OACT,IAAG11B,KAAKq1B,WAAar1B,KAAKq1B,WAAaz0C,EAAE+0C,IAAIrnD,EAAG,YACzCsS,GAAE+0C,GAAKz8C,KAAI0D,KAAKgE,EAAI,MAC5B,KAAK,mBAAoB,KACzB,KAAK,iBAAkB,KACvB,KAAK,yBAA0B,KAC/B,KAAK,uBAAwB,KAC7B,KAAK,sBAAuB,KAC5B,KAAK,oBAAqB,KAC1B,SAAS,IAAIssC,MAAQltB,KAAKilB,IAAK,KAAM,IAAIp2C,OAAM,qBAAuB6rC,GAAK,IAAMC,EAAEtsC,KAGrF,OAAO6K,KAGR,QAAS88C,oBAAmBxjD,KAAMwtB,OAElC,QAASi2B,yBAAwBzjD,KAAMzD,QACtC,GAAImnD,KAAM1jD,KAAKwnC,WAAW,EAC1B,OAAOE,WAAU1nC,KAAMzD,OAAO,GAE/B,GAAI60C,QACJ,IAAIuS,YAEJnQ,MAAKoQ,GAAK,+EAEV,SAASC,YAAWhR,IAAK/wC,KACxB,IAAI,GAAI1F,GAAI,EAAG0S,IAAM+jC,IAAIt2C,OAAQH,EAAI0S,MAAO1S,EAAG,GAAGy2C,IAAIz2C,GAAGR,IAAMkG,IAAK,CAAE+wC,IAAImH,OAAU,OAAO59C,GAC3Fy2C,IAAI/jC,MAAQlT,EAAEkG,IAAM+wC,KAAImH,OAAUnH,KAAIoH,QAAW,OAAOnrC,KAGzD,QAASg1C,gBAAexS,OAAQpH,KAAM1c,MACrC,GAAIsU,GAAItU,KAAKu2B,OAAO7Z,KAAKpI,GAAK,KAAOoI,KAAKpI,EAAI,UAC9C,KAAI,GAAI1lC,GAAI,EAAG0S,IAAMwiC,OAAO/0C,OAAQH,GAAK0S,MAAO1S,EAAG,GAAGk1C,OAAOl1C,GAAGihD,WAAavb,EAAG,MAAO1lC,EACvFk1C,QAAOxiC,MACNuuC,SAASvb,EACTkiB,OAAO,EACPtG,OAAO,EACPuG,SAAS,EACTC,KAAK,EACLC,kBAAkB,EAEnB,OAAOr1C,KAGR,QAASs1C,aAAYlqC,EAAGg9B,MAAOmN,OAAQ72B,MACtC,IACC,GAAGtT,EAAEte,IAAM,IAAKse,EAAE+X,EAAI/X,EAAE+X,GAAKgZ,KAAK/wB,EAAEqZ,OAC/B,IAAG2jB,QAAU,EAAG,CACpB,GAAGh9B,EAAEte,IAAM,IAAK,CACf,IAAIse,EAAEqZ,EAAE,KAAOrZ,EAAEqZ,EAAGrZ,EAAE+X,EAAI+D,IAAIwC,aAAate,EAAEqZ,EAAEowB,cAC1CzpC,GAAE+X,EAAI+D,IAAI2D,aAAazf,EAAEqZ,EAAEowB,cAE5B,IAAGzpC,EAAEte,IAAM,IAAK,CACpB,GAAIqhC,IAAKyD,QAAQxmB,EAAEqZ,EACnB,KAAI0J,GAAG,KAAOA,GAAI/iB,EAAE+X,EAAI+D,IAAIwC,aAAayE,GAAG0mB,cACvCzpC,GAAE+X,EAAI+D,IAAI2D,aAAasD,GAAG0mB,cAE3B,IAAGzpC,EAAEqZ,IAAMjuB,UAAW,MAAO,OAC7B4U,GAAE+X,EAAI+D,IAAI6D,SAAS3f,EAAEqZ,EAAEowB,cAExB,IAAGzpC,EAAEte,IAAM,IAAKse,EAAE+X,EAAI+D,IAAI4J,OAAOsX,MAAMxW,QAAQxmB,EAAEqZ,GAAGowB,cACpDzpC,GAAE+X,EAAI+D,IAAI4J,OAAOsX,MAAMh9B,EAAEqZ,EAAEowB,SAChC,IAAGn2B,KAAK82B,OAAQpqC,EAAE4nB,EAAI9L,IAAI6J,OAAOqX,OAChC,MAAMh8C,GAAK,GAAGsyB,KAAKilB,IAAK,KAAMv3C,GAChC,GAAGmpD,OAAQ,IACVnqC,EAAEne,EAAIu1C,OAAOsL,MAAMyH,OACnB,IAAInqC,EAAEne,EAAEkhD,SAAW/iC,EAAEne,EAAEkhD,QAAQD,MAAO,CACrC9iC,EAAEne,EAAEkhD,QAAQhE,IAAM0C,SAAS9J,OAAOuO,cAAcC,UAAUnmC,EAAEne,EAAEkhD,QAAQD,OAAO/D,IAAK/+B,EAAEne,EAAEkhD,QAAQrB,MAAQ,EACtG,IAAGpuB,KAAKilB,IAAKv4B,EAAEne,EAAEkhD,QAAQsH,QAAU1S,OAAOuO,cAAcC,UAAUnmC,EAAEne,EAAEkhD,QAAQD,OAAO/D,IAEtF,GAAI/+B,EAAEne,EAAE+gD,SAAW5iC,EAAEne,EAAE+gD,QAAQE,MAAO,CACrC9iC,EAAEne,EAAE+gD,QAAQ7D,IAAM0C,SAAS9J,OAAOuO,cAAcC,UAAUnmC,EAAEne,EAAE+gD,QAAQE,OAAO/D,IAAK/+B,EAAEne,EAAE+gD,QAAQlB,MAAQ,EACtG,IAAGpuB,KAAKilB,IAAKv4B,EAAEne,EAAE+gD,QAAQyH,QAAU1S,OAAOuO,cAAcC,UAAUnmC,EAAEne,EAAE+gD,QAAQE,OAAO/D,KAErF,MAAM/9C,GAAK,GAAGsyB,KAAKilB,IAAK,KAAMv3C,IAEjC,QAASspD,kBAAiBC,GAAI1oD,GAC7B,GAAIq6B,GAAI6rB,kBAAkBlmD,EAC1B,IAAGq6B,EAAEr6B,EAAED,GAAGs6B,EAAEl7B,EAAEY,GAAKs6B,EAAEr6B,EAAEqS,GAAGgoB,EAAEl7B,EAAEkT,GAAKgoB,EAAEr6B,EAAED,GAAG,GAAKs6B,EAAEr6B,EAAEqS,GAAG,EAAGq2C,GAAG,QAAUpC,aAAajsB,GAEpF,GAAIsuB,aAAc,oCAClB,IAAIC,gBAAiB,wDACrB,IAAIC,YAAa,qBACjB,IAAIC,UAAW,aACf,IAAIC,UAAW,eAEf,SAASC,cAAa/kD,KAAMwtB,KAAM4kB,MACjC,IAAIpyC,KAAM,MAAOA,KAEjB,IAAIjE,KAGJ,IAAIipD,MAAOhlD,KAAKrC,QAAQ,aACxB,IAAGqnD,KAAO,EAAG,CACZ,GAAIjD,KAAM/hD,KAAK+1B,OAAOivB,KAAK,IAAI1kC,MAAMukC,SACrC,IAAG9C,KAAO,KAAMyC,iBAAiBzoD,EAAGgmD,IAAI,IAIzC,GAAIkD,cACJ,IAAGjlD,KAAKrC,QAAQ,oBAAoB,EAAG,CACtC,GAAIunD,QAASllD,KAAKsgB,MAAMokC,YACxB,KAAIM,KAAO,EAAGA,MAAQE,OAAO3oD,SAAUyoD,KACtCC,WAAWD,MAAQ/C,kBAAkBiD,OAAOF,MAAMjvB,OAAOmvB,OAAOF,MAAMrnD,QAAQ,KAAM,IAItF,GAAIwnD,WACJ,IAAG33B,KAAK43B,YAAcplD,KAAKrC,QAAQ,cAAc,EAAG,CAEnD,GAAI0nD,MAAOrlD,KAAKsgB,MAAMwkC,SACtBQ,mBAAkBH,QAASE,MAG5B,GAAIE,WAAYxpD,GAAID,EAAE,IAASsS,EAAE,KAAUlT,GAAIY,EAAE,EAAGsS,EAAE,GAGtD,IAAIo3C,MAAKxlD,KAAKsgB,MAAMqkC,eACpB,IAAGa,KAAMC,kBAAkBD,KAAK,GAAIzpD,EAAGyxB,KAAM+3B,SAG7C,IAAGvlD,KAAKrC,QAAQ,oBAAoB,EAAG+nD,oBAAoB3pD,EAAGiE,KAAKsgB,MAAMskC,YAAaxS,KAEtF,KAAIr2C,EAAE,SAAWwpD,SAASrqD,EAAEkT,GAAKm3C,SAASxpD,EAAEqS,GAAKm3C,SAASrqD,EAAEY,GAAKypD,SAASxpD,EAAED,EAAGC,EAAE,QAAUsmD,aAAakD,SACxG,IAAG/3B,KAAKq1B,UAAY,GAAK9mD,EAAE,QAAS,CACnC,GAAI4pD,QAAS1D,kBAAkBlmD,EAAE,QACjC,IAAGyxB,KAAKq1B,WAAa8C,OAAOzqD,EAAEY,EAAG,CAChC6pD,OAAOzqD,EAAEY,EAAI0xB,KAAKq1B,UAAY,CAC9B,IAAG8C,OAAOzqD,EAAEY,EAAIypD,SAASrqD,EAAEY,EAAG6pD,OAAOzqD,EAAEY,EAAIypD,SAASrqD,EAAEY,CACtD,IAAG6pD,OAAOzqD,EAAEY,EAAI6pD,OAAO5pD,EAAED,EAAG6pD,OAAO5pD,EAAED,EAAI6pD,OAAOzqD,EAAEY,CAClD,IAAG6pD,OAAOzqD,EAAEkT,EAAIm3C,SAASrqD,EAAEkT,EAAGu3C,OAAOzqD,EAAEkT,EAAIm3C,SAASrqD,EAAEkT,CACtD,IAAGu3C,OAAOzqD,EAAEkT,EAAIu3C,OAAO5pD,EAAEqS,EAAGu3C,OAAO5pD,EAAEqS,EAAIu3C,OAAOzqD,EAAEkT,CAClDrS,GAAE,YAAcA,EAAE,OAClBA,GAAE,QAAUsmD,aAAasD,SAG3B,GAAGV,WAAW1oD,OAAS,EAAGR,EAAE,WAAakpD,UACzC,IAAGE,QAAQ5oD,OAAS,EAAGR,EAAE,SAAWopD,OACpC,OAAOppD,GAGR,QAAS6pD,qBAAoBV,QAC5B,GAAGA,OAAO3oD,QAAU,EAAG,MAAO,EAC9B,IAAIP,GAAI,sBAAwBkpD,OAAO3oD,OAAS,IAChD,KAAI,GAAIH,GAAI,EAAGA,GAAK8oD,OAAO3oD,SAAUH,EAAGJ,GAAK,mBAAqBqmD,aAAa6C,OAAO9oD,IAAM,KAC5F,OAAOJ,GAAI,gBAGZ,QAAS0pD,qBAAoB3pD,EAAGiE,KAAMoyC,MACr