Full Code of AlaSQL/alasql for AI

develop a4f6be3700f1 cached
899 files
12.6 MB
3.3M tokens
1911 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (13,375K chars total). Download the full file to get everything.
Repository: AlaSQL/alasql
Branch: develop
Commit: a4f6be3700f1
Files: 899
Total size: 12.6 MB

Directory structure:
gitextract_0f6woyv4/

├── .editorconfig
├── .eslintignore
├── .gitattributes
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── copilot-instructions.md
│   ├── dependabot.yml
│   ├── renovate.json5
│   └── workflows/
│       ├── Build and test.yml
│       ├── codeql.yml
│       ├── dependency-review.yml
│       └── scorecard.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   ├── pre-commit
│   └── pre-push
├── .npmignore
├── .prettierignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASES.md
├── SECURITY.md
├── TESTLOG.md
├── bin/
│   ├── alaserver.js
│   └── alasql-cli.js
├── build.sh
├── docs/
│   └── PRECOMPILE.md
├── examples/
│   ├── angular/
│   │   └── import-export-excel/
│   │       ├── import-export-to-excel.factory.js
│   │       ├── import-from-excel.directive.js
│   │       ├── test.controller.js
│   │       └── test.html
│   ├── country/
│   │   └── city.js
│   ├── nodesample.js
│   ├── other/
│   │   └── test.js
│   ├── param.js
│   ├── precompile/
│   │   ├── build/
│   │   │   ├── myCode.bundle.js
│   │   │   └── myCodeIsolate.bundle.js
│   │   ├── build.sh
│   │   └── myCode.js
│   ├── promise.js
│   ├── simple/
│   │   └── ex102.js
│   └── sqlite/
│       └── test.js
├── modules/
│   └── xlsx/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── bin/
│       │   └── xlsx.njs
│       ├── bower.json
│       ├── dist/
│       │   ├── LICENSE
│       │   ├── cpexcel.d.ts
│       │   ├── cpexcel.full.mjs
│       │   ├── cpexcel.js
│       │   ├── xlsx.extendscript.js
│       │   ├── xlsx.zahl.js
│       │   ├── xlsx.zahl.mjs
│       │   └── zahl.d.ts
│       ├── package.ori.json
│       ├── types/
│       │   ├── index.d.ts
│       │   └── tsconfig.json
│       ├── xlsx.js
│       ├── xlsx.mjs
│       └── xlsxworker.js
├── package.json
├── src/
│   ├── 05copyright.js
│   ├── 10start.js
│   ├── 12pretty.js
│   ├── 15utility.js
│   ├── 16comments.js
│   ├── 17alasql.js
│   ├── 18promise.js
│   ├── 20database.js
│   ├── 21transaction.js
│   ├── 23table.js
│   ├── 24view.js
│   ├── 25queryclass.js
│   ├── 28yy.js
│   ├── 30statements.js
│   ├── 35search.js
│   ├── 38query.js
│   ├── 39dojoin.js
│   ├── 40select.js
│   ├── 41exists.js
│   ├── 420from.js
│   ├── 421join.js
│   ├── 422where.js
│   ├── 423groupby.js
│   ├── 424select.js
│   ├── 425having.js
│   ├── 426orderby.js
│   ├── 427pivot.js
│   ├── 43rollup.js
│   ├── 44defcols.js
│   ├── 45union.js
│   ├── 46apply.js
│   ├── 47over.js
│   ├── 50expression.js
│   ├── 52linq.js
│   ├── 55functions.js
│   ├── 56sprintf.js
│   ├── 57case.js
│   ├── 58json.js
│   ├── 59convert.js
│   ├── 60createtable.js
│   ├── 61date.js
│   ├── 62droptable.js
│   ├── 63createvertex.js
│   ├── 64altertable.js
│   ├── 65createindex.js
│   ├── 66dropindex.js
│   ├── 67withselect.js
│   ├── 68if.js
│   ├── 69while.js
│   ├── 70insert.js
│   ├── 71trigger.js
│   ├── 72delete.js
│   ├── 74update.js
│   ├── 75merge.js
│   ├── 76usedatabase.js
│   ├── 77declare.js
│   ├── 78show.js
│   ├── 79set.js
│   ├── 80console.js
│   ├── 81commit.js
│   ├── 821tsql.js
│   ├── 822mysql.js
│   ├── 823postgres.js
│   ├── 824oracle.js
│   ├── 825sqlite.js
│   ├── 826orientdb.js
│   ├── 830into.js
│   ├── 831xls.js
│   ├── 832xlsxml.js
│   ├── 833xlsx.js
│   ├── 839zip.js
│   ├── 843xml.js
│   ├── 844gexf.js
│   ├── 84from.js
│   ├── 85help.js
│   ├── 86print.js
│   ├── 87source.js
│   ├── 88require.js
│   ├── 89assert.js
│   ├── 91indexeddb.js
│   ├── 92localstorage.js
│   ├── 93sqljs.js
│   ├── 94filestorage.js
│   ├── 97saveas.js
│   ├── 98finish.js
│   ├── 99worker-finish.js
│   ├── 99worker-start.js
│   ├── 99worker.js
│   ├── FileSaver.js
│   ├── alasqlparser.jison
│   ├── alasqlparser.js
│   ├── console/
│   │   └── README.md
│   ├── db2/
│   │   └── README.md
│   ├── debug/
│   │   └── README.md
│   ├── echo/
│   │   ├── README.md
│   │   └── alasql-echo.js
│   ├── filestorage/
│   │   └── README.md
│   ├── filesystem/
│   │   └── README.md
│   ├── graph/
│   │   └── README.md
│   ├── help/
│   │   └── README.md
│   ├── html/
│   │   └── README.md
│   ├── indexeddb/
│   │   └── README.md
│   ├── linq/
│   │   └── README.md
│   ├── localstorage/
│   │   └── README.md
│   ├── lovefield/
│   │   └── README.md
│   ├── md/
│   │   └── README.md
│   ├── mongodb/
│   │   └── README.md
│   ├── mysql/
│   │   └── README.md
│   ├── neo4j/
│   │   └── README.md
│   ├── oracle/
│   │   └── README.md
│   ├── orientdb/
│   │   ├── README.md
│   │   ├── alasql-orientdb.js
│   │   └── orientdbparser.jison
│   ├── postgres/
│   │   └── README.md
│   ├── pouchdb/
│   │   └── README.md
│   ├── precompile/
│   │   ├── README.md
│   │   └── index.js
│   ├── pretty/
│   │   └── README.md
│   ├── prolog/
│   │   ├── README.md
│   │   ├── alasql-prolog.js
│   │   └── prolog.coffee
│   ├── sprintf/
│   │   └── README.md
│   ├── sqlite/
│   │   └── README.md
│   ├── sqljs/
│   │   └── README.md
│   ├── tabletop/
│   │   └── README.md
│   ├── tsql/
│   │   └── README.md
│   ├── websql/
│   │   ├── README.md
│   │   └── sqliteparser.jison
│   ├── xls/
│   │   └── README.md
│   └── xml/
│       └── README.md
├── test/
│   ├── !testlog/
│   │   ├── Chakra.md
│   │   ├── Chrome.md
│   │   ├── Edge.md
│   │   ├── Firefox.md
│   │   ├── IE.md
│   │   ├── SQLlogic Chakra.md
│   │   ├── SQLlogic.md
│   │   └── Safari.md
│   ├── browserTestRunner.js
│   ├── browserTestRunner.tmlp.html
│   ├── coverage/
│   │   ├── coverage.json
│   │   ├── lcov-report/
│   │   │   ├── base.css
│   │   │   ├── index.html
│   │   │   ├── lib/
│   │   │   │   └── zt/
│   │   │   │       ├── index.html
│   │   │   │       └── zt.js.html
│   │   │   ├── prettify.css
│   │   │   ├── prettify.js
│   │   │   └── sorter.js
│   │   └── lcov.info
│   ├── lib/
│   │   ├── assert/
│   │   │   └── assert.js
│   │   ├── mocha/
│   │   │   ├── mocha.css
│   │   │   └── mocha.js
│   │   └── zt/
│   │       └── zt.js
│   ├── performance/
│   │   ├── #1027/
│   │   │   ├── README.md
│   │   │   ├── perf-comparison.js
│   │   │   ├── perf-direct-load.js
│   │   │   └── perf-join-index.js
│   │   ├── #118/
│   │   │   ├── README.md
│   │   │   ├── perf-cartesian.js
│   │   │   ├── perf-implicit-vs-explicit.js
│   │   │   └── perf-many-joins.js
│   │   ├── benchmark_alasql.js
│   │   ├── count.html
│   │   ├── speed/
│   │   │   ├── speedtest.js
│   │   │   └── test01.js
│   │   ├── var.html
│   │   ├── vssqlike.html
│   │   ├── vssqljs.html
│   │   ├── vssqljs2.html
│   │   ├── vssqljs3.html
│   │   └── vssqljs4.html
│   ├── skip/
│   │   ├── test119.js
│   │   ├── test123.js
│   │   ├── test131.js
│   │   ├── test132.js
│   │   ├── test134.js
│   │   ├── test135.js
│   │   └── test136.js
│   ├── test-csv-string-type.js
│   ├── test.js
│   ├── test000.js
│   ├── test001.js
│   ├── test002.js
│   ├── test003.js
│   ├── test004.js
│   ├── test005.js
│   ├── test006.js
│   ├── test007.js
│   ├── test008.js
│   ├── test009.js
│   ├── test010.js
│   ├── test011.js
│   ├── test012.js
│   ├── test013.js
│   ├── test014.js
│   ├── test015.js
│   ├── test016.js
│   ├── test016a.js
│   ├── test017.js
│   ├── test018.js
│   ├── test019.js
│   ├── test020.js
│   ├── test021.js
│   ├── test022.js
│   ├── test023.js
│   ├── test024.js
│   ├── test025.js
│   ├── test026.js
│   ├── test027.js
│   ├── test028.js
│   ├── test029.js
│   ├── test030.js
│   ├── test031.js
│   ├── test032.js
│   ├── test033.js
│   ├── test034.js
│   ├── test035.js
│   ├── test036.js
│   ├── test037.js
│   ├── test038.js
│   ├── test039.js
│   ├── test040.js
│   ├── test041.js
│   ├── test042.js
│   ├── test043.js
│   ├── test044.js
│   ├── test045.js
│   ├── test046.js
│   ├── test047.js
│   ├── test048-B.js
│   ├── test048.js
│   ├── test049.js
│   ├── test050.js
│   ├── test051.js
│   ├── test052.js
│   ├── test053.js
│   ├── test054.js
│   ├── test055.js
│   ├── test056.js
│   ├── test057.js
│   ├── test058.js
│   ├── test059.js
│   ├── test060.js
│   ├── test061.js
│   ├── test062.js
│   ├── test063.js
│   ├── test064.js
│   ├── test065.js
│   ├── test066.js
│   ├── test067.js
│   ├── test068.js
│   ├── test069.js
│   ├── test070.js
│   ├── test071.js
│   ├── test072.js
│   ├── test073.js
│   ├── test074.js
│   ├── test075.js
│   ├── test076.js
│   ├── test077.js
│   ├── test078.js
│   ├── test079.js
│   ├── test080.js
│   ├── test081.js
│   ├── test082.js
│   ├── test083.js
│   ├── test084.js
│   ├── test085.js
│   ├── test086.js
│   ├── test087.js
│   ├── test088.js
│   ├── test089.js
│   ├── test090.js
│   ├── test091.js
│   ├── test092.js
│   ├── test093.js
│   ├── test094.js
│   ├── test095.js
│   ├── test096.js
│   ├── test097.js
│   ├── test098.js
│   ├── test099.js
│   ├── test100.js
│   ├── test1004.js
│   ├── test1009.js
│   ├── test101.js
│   ├── test102.js
│   ├── test1027.js
│   ├── test103.js
│   ├── test104.js
│   ├── test105.js
│   ├── test106.js
│   ├── test107-B.js
│   ├── test107.js
│   ├── test108.js
│   ├── test109.js
│   ├── test110.js
│   ├── test1109.js
│   ├── test111.js
│   ├── test1119.js
│   ├── test112.js
│   ├── test1126.js
│   ├── test113.js
│   ├── test114.js
│   ├── test1146.js
│   ├── test1147.js
│   ├── test115.js
│   ├── test1154.js
│   ├── test116.js
│   ├── test117.js
│   ├── test1173.js
│   ├── test118-B.js
│   ├── test118.js
│   ├── test1185.js
│   ├── test119.js
│   ├── test120.js
│   ├── test121.js
│   ├── test1211.js
│   ├── test122.js
│   ├── test123.js
│   ├── test124.js
│   ├── test125.js
│   ├── test125B.js
│   ├── test126.js
│   ├── test1263.js
│   ├── test127.js
│   ├── test127.sql
│   ├── test1278.js
│   ├── test128-B.js
│   ├── test128.js
│   ├── test128.sql
│   ├── test129.js
│   ├── test130-B.js
│   ├── test130.js
│   ├── test131.js
│   ├── test131.sql
│   ├── test132.js
│   ├── test133.js
│   ├── test134.csv
│   ├── test134.js
│   ├── test134.tab
│   ├── test135.js
│   ├── test136-B.js
│   ├── test136.js
│   ├── test137.js
│   ├── test138.js
│   ├── test1384.js
│   ├── test139.js
│   ├── test140.js
│   ├── test1400.js
│   ├── test1400a.csv
│   ├── test1400b.csv
│   ├── test1406.js
│   ├── test1409.js
│   ├── test141.js
│   ├── test1415.js
│   ├── test142.js
│   ├── test143-B.js
│   ├── test143.js
│   ├── test144.js
│   ├── test145.js
│   ├── test1455.js
│   ├── test146.js
│   ├── test147.js
│   ├── test148.js
│   ├── test1484.js
│   ├── test149.js
│   ├── test1495.js
│   ├── test1496.js
│   ├── test150.js
│   ├── test151.js
│   ├── test152.js
│   ├── test1526.js
│   ├── test1529.js
│   ├── test153.js
│   ├── test154.js
│   ├── test1547.js
│   ├── test155-B.js
│   ├── test155.js
│   ├── test1556.js
│   ├── test156.js
│   ├── test157.js
│   ├── test157.txt
│   ├── test157a.csv
│   ├── test157a.tab
│   ├── test157b.csv
│   ├── test157b.tab
│   ├── test158.js
│   ├── test159.js
│   ├── test160.js
│   ├── test160.txt
│   ├── test161.js
│   ├── test162.js
│   ├── test163.js
│   ├── test164.js
│   ├── test1641.js
│   ├── test1643.js
│   ├── test1645.js
│   ├── test166.js
│   ├── test1666.js
│   ├── test167.js
│   ├── test167B.js
│   ├── test168.js
│   ├── test168.xls
│   ├── test168.xlsx
│   ├── test1684.js
│   ├── test169.js
│   ├── test169.txt
│   ├── test169a.csv
│   ├── test169a.tab
│   ├── test169b.tab
│   ├── test170.js
│   ├── test172.js
│   ├── test173.js
│   ├── test1734.js
│   ├── test174.js
│   ├── test1740.js
│   ├── test175.js
│   ├── test176.js
│   ├── test176a.tab
│   ├── test176b.csv
│   ├── test176c.csv
│   ├── test176d.csv
│   ├── test177.js
│   ├── test178.js
│   ├── test1789.js
│   ├── test179.js
│   ├── test1796.js
│   ├── test1797.js
│   ├── test180.js
│   ├── test181.js
│   ├── test182.js
│   ├── test1820.js
│   ├── test1829.js
│   ├── test183.js
│   ├── test184.js
│   ├── test1848.js
│   ├── test185.js
│   ├── test186.js
│   ├── test187.js
│   ├── test1871.js
│   ├── test188.js
│   ├── test1885.js
│   ├── test1889.js
│   ├── test189.js
│   ├── test189.sql
│   ├── test1898.js
│   ├── test190.js
│   ├── test1904.js
│   ├── test191.js
│   ├── test1919.js
│   ├── test1919.jsonl
│   ├── test1919.ndjson
│   ├── test192.js
│   ├── test193.js
│   ├── test1936.js
│   ├── test194.js
│   ├── test195.js
│   ├── test196.js
│   ├── test1965.js
│   ├── test1966.js
│   ├── test1967.js
│   ├── test197.js
│   ├── test1977.js
│   ├── test198-1.sql
│   ├── test198-2.sql
│   ├── test198.js
│   ├── test1983.js
│   ├── test1985.js
│   ├── test199.js
│   ├── test200.js
│   ├── test2000.js
│   ├── test201.js
│   ├── test202.js
│   ├── test2027.js
│   ├── test203.js
│   ├── test2039.js
│   ├── test203myfn.js1
│   ├── test203myfn2.js1
│   ├── test204.js
│   ├── test205.js
│   ├── test206.js
│   ├── test207.js
│   ├── test2070.js
│   ├── test208.js
│   ├── test209.js
│   ├── test210.js
│   ├── test211.js
│   ├── test2112.js
│   ├── test212.js
│   ├── test213.js
│   ├── test214.js
│   ├── test2141.js
│   ├── test2147.js
│   ├── test2149-with-txt.sql
│   ├── test2149-without-txt.sql
│   ├── test2149.js
│   ├── test215.js
│   ├── test2155.js
│   ├── test216.js
│   ├── test2169.js
│   ├── test2169B.js
│   ├── test217.js
│   ├── test218.js
│   ├── test2184.js
│   ├── test219.js
│   ├── test2197.js
│   ├── test220.js
│   ├── test2200.js
│   ├── test2203.js
│   ├── test221.js
│   ├── test2218.js
│   ├── test222.js
│   ├── test2222.js
│   ├── test2223.js
│   ├── test2224.js
│   ├── test223.js
│   ├── test2239.js
│   ├── test224.js
│   ├── test2248.js
│   ├── test225.js
│   ├── test226.js
│   ├── test227.js
│   ├── test228.js
│   ├── test2280.js
│   ├── test229.js
│   ├── test230.js
│   ├── test231.js
│   ├── test2317.js
│   ├── test2318.js
│   ├── test232.js
│   ├── test233.js
│   ├── test233.sql
│   ├── test234.js
│   ├── test234.sql
│   ├── test2348.js
│   ├── test235.js
│   ├── test2359.js
│   ├── test236.js
│   ├── test2360.js
│   ├── test2361.js
│   ├── test237.js
│   ├── test238.js
│   ├── test238a.csv
│   ├── test238b.xlsx
│   ├── test239.js
│   ├── test240.js
│   ├── test2408.js
│   ├── test241.js
│   ├── test2413.js
│   ├── test2414.js
│   ├── test242.js
│   ├── test242.xlsx
│   ├── test2420.js
│   ├── test243.js
│   ├── test244.js
│   ├── test245.js
│   ├── test246.js
│   ├── test247.js
│   ├── test248.js
│   ├── test249.js
│   ├── test250.js
│   ├── test251.js
│   ├── test252.js
│   ├── test253.js
│   ├── test254.js
│   ├── test255.js
│   ├── test256.js
│   ├── test257.js
│   ├── test258.js
│   ├── test259.js
│   ├── test260.js
│   ├── test261.js
│   ├── test262.js
│   ├── test263.js
│   ├── test264.js
│   ├── test265.js
│   ├── test266.js
│   ├── test267.js
│   ├── test268.js
│   ├── test269.js
│   ├── test270.js
│   ├── test271.js
│   ├── test272.js
│   ├── test273.js
│   ├── test274.js
│   ├── test275.js
│   ├── test276.js
│   ├── test277.js
│   ├── test278.js
│   ├── test279.js
│   ├── test280.js
│   ├── test281.js
│   ├── test282.js
│   ├── test283.js
│   ├── test284.js
│   ├── test285.js
│   ├── test286.js
│   ├── test287.js
│   ├── test288.js
│   ├── test289.js
│   ├── test290.js
│   ├── test291.js
│   ├── test292-B.js
│   ├── test292.js
│   ├── test293.js
│   ├── test294.js
│   ├── test295.js
│   ├── test296.js
│   ├── test297.js
│   ├── test298.js
│   ├── test299.js
│   ├── test300.js
│   ├── test301.js
│   ├── test302.js
│   ├── test303.js
│   ├── test304.js
│   ├── test305.js
│   ├── test305a.gexf
│   ├── test306.js
│   ├── test306.xml
│   ├── test306a.xml
│   ├── test307.js
│   ├── test308.js
│   ├── test309.js
│   ├── test310.js
│   ├── test311.js
│   ├── test312.js
│   ├── test313.js
│   ├── test314.js
│   ├── test315.js
│   ├── test316.js
│   ├── test317.js
│   ├── test318.js
│   ├── test319.js
│   ├── test320.js
│   ├── test321.js
│   ├── test321a.csv
│   ├── test322.js
│   ├── test323.js
│   ├── test324.js
│   ├── test324.sql
│   ├── test325.js
│   ├── test326.js
│   ├── test327.js
│   ├── test328.js
│   ├── test329.js
│   ├── test330.js
│   ├── test331.js
│   ├── test332.js
│   ├── test333.js
│   ├── test334.js
│   ├── test335.js
│   ├── test336.js
│   ├── test337.js
│   ├── test338.js
│   ├── test339.js
│   ├── test340.js
│   ├── test341.js
│   ├── test342.js
│   ├── test343.js
│   ├── test344.js
│   ├── test345.js
│   ├── test346.js
│   ├── test347.js
│   ├── test348.js
│   ├── test349.js
│   ├── test350.js
│   ├── test351.js
│   ├── test352.js
│   ├── test353.js
│   ├── test354.js
│   ├── test355.js
│   ├── test356.js
│   ├── test357.js
│   ├── test358.js
│   ├── test359.js
│   ├── test360.js
│   ├── test361.js
│   ├── test362.js
│   ├── test363.js
│   ├── test364.js
│   ├── test365.js
│   ├── test366.js
│   ├── test367.js
│   ├── test368.js
│   ├── test369.js
│   ├── test37.js
│   ├── test370.js
│   ├── test371.js
│   ├── test372.js
│   ├── test373.js
│   ├── test374.js
│   ├── test375.js
│   ├── test376.js
│   ├── test377.js
│   ├── test378.js
│   ├── test379.js
│   ├── test380.js
│   ├── test381.js
│   ├── test382.js
│   ├── test383.js
│   ├── test384.js
│   ├── test385.js
│   ├── test386.js
│   ├── test387.js
│   ├── test388.js
│   ├── test389.js
│   ├── test390.js
│   ├── test391.js
│   ├── test392.js
│   ├── test393.js
│   ├── test394.js
│   ├── test395.js
│   ├── test396.js
│   ├── test397.js
│   ├── test398.js
│   ├── test399.js
│   ├── test400.js
│   ├── test401.js
│   ├── test402.js
│   ├── test403.js
│   ├── test404.js
│   ├── test404.sql
│   ├── test405.js
│   ├── test406.js
│   ├── test407.js
│   ├── test408.js
│   ├── test409.js
│   ├── test410.js
│   ├── test411.js
│   ├── test411.xlsx
│   ├── test412.js
│   ├── test413.js
│   ├── test414.js
│   ├── test415.js
│   ├── test416.js
│   ├── test417.js
│   ├── test418.js
│   ├── test419.js
│   ├── test419.xlsx
│   ├── test419a.txt
│   ├── test42.js
│   ├── test420.js
│   ├── test420.xlsx
│   ├── test421.js
│   ├── test422.js
│   ├── test423.js
│   ├── test424.js
│   ├── test425.js
│   ├── test426.js
│   ├── test427.js
│   ├── test428.js
│   ├── test429.js
│   ├── test430.js
│   ├── test431.js
│   ├── test432.js
│   ├── test433.js
│   ├── test434.js
│   ├── test485.js
│   ├── test490.js
│   ├── test525.js
│   ├── test536-B.js
│   ├── test547.js
│   ├── test604.js
│   ├── test605.js
│   ├── test606-B.js
│   ├── test606.js
│   ├── test607.js
│   ├── test608.js
│   ├── test609.js
│   ├── test610.js
│   ├── test611.js
│   ├── test612.js
│   ├── test613.js
│   ├── test614.js
│   ├── test614.xlsx
│   ├── test615.js
│   ├── test615.xlsx
│   ├── test616.js
│   ├── test617.js
│   ├── test618.js
│   ├── test619.js
│   ├── test620.js
│   ├── test622.js
│   ├── test623.js
│   ├── test624CSVParsing.js
│   ├── test625.js
│   ├── test625.xlsx
│   ├── test626.csv
│   ├── test626.js
│   ├── test627.js
│   ├── test635-B.js
│   ├── test671.js
│   ├── test7.js
│   ├── test735.js
│   ├── test789.js
│   ├── test79-B.js
│   ├── test800.js
│   ├── test801.js
│   ├── test802.js
│   ├── test803.js
│   ├── test804.js
│   ├── test805.js
│   ├── test806.js
│   ├── test807.js
│   ├── test808.js
│   ├── test809.js
│   ├── test810.js
│   ├── test811.js
│   ├── test812.js
│   ├── test813.js
│   ├── test814.js
│   ├── test815.js
│   ├── test816.js
│   ├── test817.js
│   ├── test818.js
│   ├── test819.js
│   ├── test845-B.js
│   ├── test845.js
│   ├── test846.js
│   ├── test847.js
│   ├── test848.js
│   ├── test848.xlsx
│   ├── test856.js
│   ├── test884.js
│   ├── test895.js
│   ├── test897.js
│   ├── test925.js
│   ├── test941.js
│   ├── test942.js
│   └── worker.html
├── tslint.json
└── types/
    └── alasql.d.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
; EditorConfig file: https://EditorConfig.org
; Install the "EditorConfig" plugin into your editor to use

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = tab
trim_trailing_whitespace = true


================================================
FILE: .eslintignore
================================================
**/*.min.js
src/alasqlparser.js


================================================
FILE: .gitattributes
================================================

*.xlsx binary
*.xls binary
yarn.lock binary 

/dist/* binary merge=ours
*.min.js binary

# absolute paths are ok, as are globs
#/**/postinst* text eol=lf

# paths that don't start with / are relative to the .gitattributes folder
#relative/path/*.txt text eol=lf

src/alasqlparser.js binary




================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to making AlaSQL better


Got questions? [Tag a Stack Overflow question](http://stackoverflow.com/questions/ask?tags=AlaSQL) with `alasql`.


Inputs to improvement? [Open an issue](https://github.com/alasql/alasql/issues/new). 


**All contributions are much welcome and greatly appreciated(!)** 

- Make sure you have git, Node and yarn installed (`npm install -g yarn`)
- Fork the repo here on Github (button top right)
- Clone your forked repo and install dependencies `git clone https://github.com/MYUSERNAME/alasql/ --depth 1 && cd alasql && yarn` 
- Make sure you work with the develop branch `git checkout develop`
- Run tests to verify all is good `yarn test`
- Implement a test that reflects the issue.
  - Add a new test file for the issue: Copy `test/test000.js` and replace `000` with a new number. Preferably the number of the issue you are solving.
- Run `yarn test` to verify only the new test fails
- Implement your contributions in `src/`
- Run `yarn test` and verify all tests are OK
- Format the souce with `yarn format`
- Commit changes to git and push to your forked repo
- Click "Create Pull-request" when looking at your forked repo on Github

Please note that 
- `npm test` will compile from `src/` and overwrite `dist/` before running all tests
- If you would like to change the alasql.org website please make a PR to https://github.com/alasql/alasql-org
- To help debug a problem you can see some advice on https://github.com/AlaSQL/alasql/issues/1415#issuecomment-1293335079


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================

AlaSQL is based on unpaid voluntary work. Thank you for taking the time to make it better.


Got ChatGPT?
============

- Try the AlaSQL Bot for answering questions and helping you out with your programming. It has all the documentation and heaps of examples.

- https://chat.openai.com/g/g-XcBL24WTe-alasql-bot


Something is not working as expected?
====================================

- Describe the problem.

- Provide data and code that replicates the problem.

- We suggest spawning a jsfiddle from https://jsfiddle.net/b5ajLveq/


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================

Thank you for the time you are putting into AlaSQL!




================================================
FILE: .github/copilot-instructions.md
================================================
# GitHub Copilot Instructions for AlaSQL

## About This Project

AlaSQL is an open source SQL database for JavaScript with a focus on query speed and data source flexibility for both relational data and schemaless data. It works in web browsers, Node.js, and mobile apps.

## When Implementing Features

1. **Understand the issue thoroughly** - Read related test cases and existing code
2. **Write a test first** - Copy test/test000.js into a new file called `test/test###.js` where where `###` is the id of the issue we are trying to solve.
3. **Verify test fails** - Run `yarn test` to confirm the test catches the issue
4. **Implement the fix** - Modify appropriate file(s) in `src/`
  - If you modify the grammar in `src/alasqlgrammar.jison`, run `yarn jison && yarn test` to regenerate the parser and verify
5. **Reconsider elegance** - Make sure to assess the solution and reconsider if this can be more elegant or efficient
6. **Format code** - Run `yarn format` before committing


## Commands

```bash
# Install dependencies
yarn

# Generate grammar (if needed)
yarn jison

# Run tests
yarn test

# Format code
yarn format
```


## Files to Avoid Modifying
- `dist/` - Generated files, will be overwritten on build
- `src/alasqlparser.js` - Generated from Jison grammar (modify the `.jison` file instead)
- `.min.js` files - Generated during build


## Plesae note 

- Alasql is meant to return `undefined` instead of `null` (unline regular SQL engines)

## Resources

- [AlaSQL Documentation](https://github.com/alasql/alasql/wiki)
- [Issue Tracker](https://github.com/AlaSQL/alasql/issues)


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: github-actions
    directory: /
    schedule:
      interval: monthly

  - package-ecosystem: npm
    directory: /
    schedule:
      interval: monthly


================================================
FILE: .github/renovate.json5
================================================
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  extends: ["config:recommended"],
  packageRules: [
    {
      matchUpdateTypes: ["minor", "patch", "pin", "digest"],
      automerge: true,
    },
  ],
  automerge: true,
  automergeStrategy: "squash",
  dependencyDashboard: true,
  schedule: ["every weekend"],
  ignorePaths: ["modules/**"],
}


================================================
FILE: .github/workflows/Build and test.yml
================================================
name: 'CI build & test'

on:
  push:
    branches: '*'
  pull_request:
    branches: '*'

permissions: read-all

jobs:
  verify-formatting:
    name: Verify code formatting
    permissions:
      contents: read
    runs-on: blacksmith-4vcpu-ubuntu-2204
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Setup Node
        uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4
        with:
          node-version: '24.x'

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Verify formatting
        run: yarn test-format-all

  build:
    name: Build from source files
    needs: []
    permissions:
      contents: write
    runs-on: blacksmith-4vcpu-ubuntu-2204
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Setup Node
        uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4
        with:
          node-version: '24.x'

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Build project
        run: yarn build-only

      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: dist
          path: dist/

      - name: Package node_modules
        run: tar --exclude='.cache' -cvf node_modules.tar node_modules

      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: node_modules
          path: node_modules.tar

  test-suite-node:
    name: Test suite for Node
    permissions:
      contents: read
    needs: [build, verify-formatting]
    runs-on: blacksmith-4vcpu-ubuntu-2204
    strategy:
      matrix:
        node-version: [16.x, 18.x, 20.x, 22.x, 24.x] # Dropped '23.x' (EOL) and 'latest' for stability
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Setup Node
        uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4
        with:
          node-version: ${{ matrix.node-version }}

      - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # master
        with:
          name: dist
          path: dist/

      - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # master
        with:
          name: node_modules
          path: ./

      - name: Unpack node_modules
        run: tar -xvf node_modules.tar

      - name: Run test suite
        run: yarn test-only

  test-suite-browser:
    name: Test suite for Browser
    permissions:
      contents: read
    needs: [build, verify-formatting]
    runs-on: blacksmith-4vcpu-ubuntu-2204
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # master
        with:
          name: dist
          path: dist/

      - name: Placeholder for browser tests
        run: echo '::warning ::Not able to automate browser tests yet'

      - name: Run browser tests (disabled)
        run: '# yarn test-browser-ci'

  verify-parser:
    name: Verify grammar vs generated parser
    needs: []
    permissions:
      contents: read
    runs-on: blacksmith-4vcpu-ubuntu-2204
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          fetch-depth: 0

      - name: Get changed files
        id: detect-changes
        uses: tj-actions/changed-files@v47.0.1
        with:
          files: src/alasqlparser.jison

      - name: Build from src
        # This step only runs if the jison file changed
        if: steps.detect-changes.outputs.any_changed == 'true'
        run: |
          yarn install --frozen-lockfile
          yarn jison
          yarn test

      - name: Check generated parser for changes
        if: steps.detect-changes.outputs.any_changed == 'true'
        run: |
          git diff --exit-code -- src/alasqlparser.js || (echo "Please run 'yarn jison && yarn test' and commit again." && exit 1)


================================================
FILE: .github/workflows/codeql.yml
================================================
name: 'Code quality'

on:
  push:
    branches: ['develop']
  schedule:
    - cron: '32 13 * * 0'

permissions:
  contents: read

jobs:
  analyze:
    name: Analyze
    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'blacksmith-4vcpu-ubuntu-2204' }}
    timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: ['javascript']

    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76
        with:
          egress-policy: audit

      - name: Checkout repository
        uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98

      - name: Initialize CodeQL
        uses: github/codeql-action/init@b126facd4e5d140dbdf5202489ec4a70ff75ce5c
        with:
          languages: ${{ matrix.language }}

      - name: Autobuild
        uses: github/codeql-action/autobuild@b126facd4e5d140dbdf5202489ec4a70ff75ce5c

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@b126facd4e5d140dbdf5202489ec4a70ff75ce5c
        with:
          category: '/language:${{ matrix.language }}'


================================================
FILE: .github/workflows/dependency-review.yml
================================================
# Dependency Review Action
#
# This Action will scan dependency manifest files that change as part of a Pull Request,
# surfacing known-vulnerable versions of the packages declared or updated in the PR.
# Once installed, if the workflow run is marked as required,
# PRs introducing known-vulnerable packages will be blocked from merging.
#
# Source repository: https://github.com/actions/dependency-review-action
name: 'Dependency Review'
on: [pull_request]

permissions:
  contents: read

jobs:
  dependency-review:
    runs-on: blacksmith-4vcpu-ubuntu-2204
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
        with:
          egress-policy: audit

      - name: 'Checkout Repository'
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2


================================================
FILE: .github/workflows/scorecard.yml
================================================
name: Scorecard analysis
on:
  push:
    # Only the default branch is supported.
    branches:
      - develop
  schedule:
    # Weekly on Saturdays.
    - cron: '30 1 * * 6'

permissions: read-all

jobs:
  analysis:
    name: Scorecard analysis
    runs-on: ubuntu-latest
    permissions:
      # Needed for Code scanning upload
      security-events: write
      # Needed for GitHub OIDC token if publish_results is true
      id-token: write

    steps:
      - name: 'Checkout code'
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: OSSF Scorecard action
        uses: ossf/scorecard-action@4a0b87a20cc42672e6c80e82e63b5cd8f25f108a
        with:
          # OUTPUT: Path to file to store results
          results_file: results.sarif
          # OUTPUT: format of the results [json, sarif]
          results_format: sarif
          # Scorecard team runs a weekly scan of public GitHub repos,
          # see https://github.com/ossf/scorecard#public-data.
          # Setting `publish_results: true` helps us scale by leveraging your workflow to
          # extract the results instead of relying on our own infrastructure to run scans.
          # And it's free for you!
          publish_results: true

      # Upload the results as artifacts (optional). Commenting out will disable
      # uploads of run results in SARIF format to the repository Actions tab.
      # https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts
      - name: 'Upload artifact'
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: SARIF file
          path: results.sarif
          retention-days: 5

      # Upload the results to GitHub's code scanning dashboard (optional).
      # Commenting out will disable upload of results to your repo's Code Scanning dashboard
      - name: 'Upload to code-scanning'
        uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
        with:
          sarif_file: results.sarif


================================================
FILE: .gitignore
================================================
# Results of tests
test/res*
node_modules/
npm-debug.log
site/
test/test604.json
test/test251.xlsx
.versions
.npm/
*.log
yarn-error.log
package-lock.json
/dist/
pnpm-lock.yaml
# Test storage files generated by dom-storage
test*.json


================================================
FILE: .husky/.gitignore
================================================
_


================================================
FILE: .husky/pre-commit
================================================
yarn test-format || (echo please format using 'yarn format' && exit 1)


================================================
FILE: .husky/pre-push
================================================
yarn test-format || (echo please format using 'yarn format' && exit 1)


================================================
FILE: .npmignore
================================================
examples/
test/
src/
*.md
gulpfile.js
yarn.lock
tslint.json
.*
*.log

================================================
FILE: .prettierignore
================================================
src/10start.js

src/98finish.js

src/99worker-finish.js

src/99worker-start.js

src/alasqlparser.js

src/97saveas.js

modules/

test/test238.json

build/

test/lib/

================================================
FILE: CHANGELOG.md
================================================
# Changelog

Please see https://github.com/AlaSQL/alasql/releases for more info...

## 0.7.1 (2021-03-05)

- Bump: Update lodash dependency


## 0.7.0 (2021-03-03)

- Fix: Code injection vulnerability processing literals
- Fix: Return empty results in group by when input is empty #927



### 0.6.5 (11.11.2020)

- Fix: Do not include null in COUNT or AVG fixes #1251


### 0.6.4 (24.09.2020)

- Add: String and Number objects supported as values
- Add: `JOIN USING` now supports String and Number objects 
- Fix: File naming when exporting to Exel


### 0.6.2 (31.05.2020)


- Add: Use NOT BETWEEN without parenthesis. 



### 0.6.1 (20.05.2020)

- Add: Use BETWEEN without parenthesis. 
- Fix: Let ADD COLUMN use the given dbtypeid



## 0.6.0 (02.05.2020)

- Add: NULLS FIRST/LAST clause in ORDER BY (#1187)
- Add: Support table/row names starting with numbers



### 0.5.9 (26.04.2020)

- Add: Composite foreign keys implementation (#1179) 
- Fix: Insert's toString() (#1177)
- Fix: DROP Filestorage Database with database name (#1184)

### 0.5.8 (27.03.2020)

- Fix: usage of CURRENT_TIMESTAMP (Fix #1174)

### 0.5.6 "Bafq" (22.03.2020)

- Add: GroupBy within nested array data set/params (#1167)
- Fix: Use unknown DB name

### 0.5.5 "Bam" (29.01.2020)

- Fix: Typescript typing

### 0.5.4 "Qom" (19.01.2020)

- Fix: QUART/MEDIAN/MIN/MAX on number/date/string


### 0.5.3 "Chabahar" (02.01.2020)

- Better: Support csv data from buffer
- Better: Error message for foreign key constraint fail #1009
- Fix: ORDER BY supports parameters #1100
- Fix: Filestorage DELETE FROM #624
- Fix: Drop trigger #1113


## 0.5.1 "Qazvin" (16.09.2019)

- Add: Chain OUTER JOIN's #1105
- Better: Typescript typings
- Better: Updated dependencies
- Fix: Join on CSV files directly
- Fix: OUTER JOIN bug #1101
- Fix: Pivot function cast for SUM and AVG 


### 0.4.11 "Lawdar" (05.10.2018)

* Add: Specified XLSX sheet without knowing the name


### 0.4.10 "Maoshk" (04.10.2018)


* Add: xlsxml files with multiple sheets


### 0.4.9 "Alsalfiah" (05.08.2018)

* Better: Error message grammar
* Better: Support for Meteor code standards
* Fix: dbprecision for select query
* Fix: Handle promise error when reading one line csv files
* Fix: AUTO_INCREMENT when using local storage

### 0.4.8 "Nafhan" (14.07.2018)

* Fix: Error when installing caused by missing cli file in npm


### 0.4.7 "Tarim" (14.07.2018)

* Better: Always find global object 


### 0.4.6 "Rahbah" (14.06.2018)

* Better: `Use strict` mode for javascript 


### 0.4.5 "Marib" (24.01.2018)

* Fix: Aggregate functions applied to empty sets (#964)
* Fix: missing ORDER BY direction when calling toString on AST (#970)
* Fix: Converting the syntax tree back to SQL with multple joins (#972)

### 0.4.4 "Alsowm" (03.12.2017)

* Better: Better usage via unpkg.com
* Better: Better usage via jsdelivr.com


### 0.4.3 "Hajjah" (05.09.2017)

* Update: Removed implicit "any" in definition file
* Fix: Tabletop reads in empty cells as numeric 0 instead of empty string 
* Fix: DISTINCT on emtpy table produced error


### 0.4.2 "Baraqish" (17.08.2017)

* Added: SQL function LTRIM
* Added: SQL function RTRIM
* Better: Remove implicit any in type script definitioni
* Better: Out-of-the-box Webpack and Browserify compatibility without hacks
* Fix: Use created database id on foreign key check as default database

 
### 0.4.1 "Sayhut" (23.07.2017)

* Better: Performace on `distinct` selects 
* Better: Hashing for cashed SQLs 
* Fix: Case insensetive selects from EXCEL
* Fix: Select from empty EXCEL


##0.4.0 "Sanaa" (09.05.2017)
* **Breaking:** OFFSET will now skip the first N rows in a result set before starting to return any rows (before it would skip N-1)
* Add: Quartile aggregators (QUART, QUART2, QUART3)
* Add: Typescript definitoin now supports extensions
* Fix: Aggregate MEDIAN now working with ROLLUP
* Fix: Aggregate STDEV now working with ROLLUP
* Fix: SHOW COLUMNS works with the promise interface 
* Fix: SHOW INDEX works with the promise interface 

### 0.3.9 "Turua" (23.03.2017)
* Add: React native support
* Fix: CSV error when quote set to empty
* Fix: autoExt bug when not set for CSV on read

### 0.3.8 "Wanaka" (15.03.2017)

* Added: Lazy promise notation
* Added: Create user defined function via SQL statement
* Added: Create user defined aggretator via SQL statement 
* Added: Auto extension for filenames on read + write
* Fix: `.xlsx` can now be imported via browser "upload"
* Update: `xls.js` package not needed any more. Only `xlsx` package is needed. 

### 0.3.7 "Niau" (20.02.2017)

* Added: Last `S` in `VALUES` can be omitted when insterting (For the lazy ones)
* Added: The `VALUES` keyword is optional when insterting (For the very lazy ones)
* Fix: Multiple worksheet Excel with custom headers 


### 0.3.6 "Hipu" (24.01.2017)

* Addded: Support for "use strict" 
* Fix: Select.toString() had bugs
* Update: Better and faster deep compare of objects


### 0.3.5 "Maiao" (22.12.2016)
* Added: Import data through AngularJS controllers
* Added: Support for running in VM for nodeJS
* Fix: Typescript definition
* Fix: False negatives for deepequal'ing of extended primitives
* Fix: Double quotation marks in CSV output


### 0.3.4 "Fitii" (09.11.2016)
* Added: trigger `AFTER DELETE`
* Fix: `TRUNCATE TABLE` now works for local storage DB
* Fix: `JOIN` a sub select
* Removed: The `HELP` command (to save space) 


### 0.3.3 "Makemo" (13.10.2016)
* Add: support for VALUE inside checks
* Add: Conflate null and undefined
* Add: Load CSV data from a string
* Add: Warn when server side uses browser build of lib
* Update: typescript definition for native import 
* Update: filesaver.js updated to 1.3.2


### 0.3.2 "Maumu" (05.09.2016)
* Added: Postgres arrays like array[] and text[]
* Added: Allow non-reserved keywords as identifiers
* Fix: Empty tsv/csv files will no longer raise an error
* Fix: alasql.d.ts format
* Fix: Better way to find out if indexedDB is present
* Fix: `null = null` is (now) null, baby.
* Update: Column names first for RECORDSETS


### 0.3.1 "Taravao" (01.08.2016)
* Allow unknown functions to be defined on alasql.fn afterwards
* Easy access to AUTOINCREMENT values
* MEDIAN will ignore null values 
* STDEV will ignore null values


## Version 0.3.0 "Papeete" (25.07.2016)
* Breaking change: CSVs with header will now default have BOM added (for better utf8 support) 
* Added: Constraint names will now be exported in error message
* Added: Web worker now supports .promise notation
* Added: Postgres-specific aliases and fixes
* Added: Make converting to an unknown type result in a noop rather than an error
* Added: Support column types consisting of more than 2 words


### 0.2.7 "Corinth" (30.05.2016)
* Added: Now supports Node 6.0 
* Added: Let .promise return all responses (not just last) 
* Change: Headers set as default true for INTO and FROM statements
* Fix: Back on track (for good) with supporting Meteor 
* Fix: Default tentative string to numbers conversion when reading data from google spreadsheets 
* Update: No need for empty params when async
* Update: Better hashing for cashing


### 0.2.6 "Frikes" (22.04.2016)
* Added: Progress callback
* Change: CLI defaults to pretty print (with option for compressed output as original)
* Fix: Declaring all variables
* Fix: Read XLSX files
* Fix: Selecting a view from localstorage 
* Fix: CREATE VIEW for localStorage engine 
* Fix: Better use for RequireJS
* Update: CLI output is guaranteed to be valid JSON 
* Update: Better error message for missing table or column
* Update: Typescript defenition for .promise
* Update: Empty params not needed for async calls


### 0.2.5 "Polychrono" (23.03.2016)
* Added: Promise chain of queries
* Fix: Remove leading whitespace from fields when importing csv files
* Fix: Set default option for XLSXML
* Fix: Use callbacks consistently 


### 0.2.4 "Exogi" (04.03.2016)
* Added: Central enviroment detection
* Added: SELECT * FROM ? GROUP BY a works as FIRST(*)
* Added: Better detection for browserify, phonegap and cordova
* Fix: CONCAT without space
* Fix: IE11: Reading Excel File
* Fix: Date handeling (in)dependent from locale


### 0.2.3 "Spetses" (01.02.2016)
* Changed: New fast way to calculate aggregators (some parameters changed)
* Added: User defined aggregators
* Fixed: Remove empty Last line in TXT and XLSX
* Changed: {headers:true} now is default option
* Fixed: option.joinstar flag for SELECT * FROM a,b
* Added: EXP() function, ^ now is XOR, ~ binary NOT
* Added: REPLACE() string function (see issue #560)
* Added: NEWID(), UUID() and GEN_RANDOM_UUID() functions for GUID
* Added: DEFAULT for column can be a function (e.g. DEFAULT NEWID())


### 0.2.2 "Mitilini" (15.01.2016)
* Fix: SELECT can use functions from GROUP BY list
* Fix: Bug in NUMERIC type conversion
* Added: functions CEIL/CEILING and FLOOR
* Added: CONCAT to the list of standard functions
* Fix: Bug with primary key after DELETE all
* Fix: Added String() to UPPER() and LOWER() functions 
* Added: PIVOT and UNPIVOT functionality
* Added: REPLACE INTO command (see issue #467)
* Added: ON UPDATE - column constraint
* Fix: COLLATE and UNIQUE KEY words for CREATE TABLE (see issue #452)
* Fix: Added params to SEARCH WHERE function
* Added: TRIGGERs
* Fix: Bug with MATRIX modifier
* Fix: Bug with undefined content variable with IN operation (issue #501)
* Fix: Bug with wrong realizaion of REPLACE INTO (issue #505)
* Added: >>,<<,&,| - binary operations
* Added: || - string concatenation (issue #514)
* Added: GLOB operator
* Fix: >> for binary operation and graphs collisions
* Added: SELECT * FROM INSERTED (for T-SQL like triggers)
* Fix: Added DEFAULT clause to INSERT SELECT statement
* Added: expression NOT NULL operator (issue #507)
* Added and Fix: REINDEX and fixed CREATE INDEX (issues #509, #470)
* Fixed: browser tests, IndexedDB tests, DROP TABLE callback for external engines
* Added: DATETIME2 type for compatibility with T-SQL
* Added: DATEADD() and DATEDIFF() functions in T-SQL style
* Added: CONCAT_WS() function
* Added: OF() selector for SEARCH statement

### 0.2.1 "Rodos" (28.09.2015)
* Added: AlaSQL CLI: Support for --version flag
* Added: AlaSQL CLI: support for CLI exit code 
* Added: AlaSQL CLI: Missing file now won't throw exception (but log error text) nor if its a folder
* Added: Support for using _ as a single wildcard in LIKE queries
* Added: Support for FETCH NEXT syntax in queries (MSSQL/T-SQL)
* Added: SUBSTR() alias for MID() function (for SQLite compatibility)
* Added: LIKE ESCAPE functionality
* Added: REGEXP operator (like MySQL) and REGEXP_LIKE() function (like in Oracle)
* Added: INSERT OR REPLACE VALUE, INSERT OR REPLACE SELECT
* Added: Read Blob as parameter for from-functions like XLS()
* Fix: .CSV files made Excel 2013 compliant 
* Fix: misbehavour related to 'NOT' and '=' predecession
* Fix: alasql running from cordova on iOS


## Version 0.2.0 "Athens" (13.07.2015)
The purpose of this release were hard work on:
* Documentation
* Resolving bugs
* Refactoring code
 
Minor verison updated to sync lib, Meteor and npm version

### 0.1.11 "San Remo" (03.06.2015)
* Code partially refactored with help of bitHound 
* New directory 'partners' added
* Added file for codecomplexity.com

### 0.1.10 "Genova" (31.05.2015 - 02.06.2015)
* CALL procedure() statement
* bitHound advices
* bower.json file updated

### 0.1.9 "Torino" (29.05.2015 - 31.05.2015)
* SERIAL data type added
* Changed package.json
* Sample application AlaSQL Codex (alasql.org/codex)
* Changed type conversion procedure for INTEGER, JSON and other types
* TypeScript definition file: alasql.d.ts

### 0.1.8 "Pisa" (22.05.2015 - 28.05.2015)
* SELECT FROM syntax
* Export to multiple sheets workbook
* SQL-99 features list
* Changed README.md
* PEOPLE.md moved to wiki
* VALUE OF SELECT operator
* bitHound file

### 0.1.7 "Parma" (17.05.2015 - 22.05.2015)
* Fixed BETWEEN AND and AND parsing priority bug (KPI1:95%)
* Fixed SUM() with NULL(undefined) values
* SLT tests run
* select1.test passed 100%
* Set jsdoc environment
* Added 'var y' and functions for NULL and undefined conversions
* Fixed AVG() aggregator for NULL elements
* New gulp commands: 'gulp doc' and 'gulp console'
* Some jsDoc documentation tag added
* Expression statement ( = 2*2 )

### 0.1.6 "Palermo" (13.05.2015 - 17.05.2015)
* SET NOCOUNT OFF (for CREATE and INSERT)
* ROWNUM() and ROW_NUMBER() functions
* Promised version of alasql() - alasql.async() (based on es6-promises)
* SELECT * FROM Json
* SEARCH COMMA selector
* Fixed bug with ORDER BY 1,2,3
* Added subqueries for INSERT/DELETE/UPDATE
* First 'official' ECHO plugin released (REQUIRE ECHO)
* New catalogs added for future plugins
* Meteor package 'agershun:alasql'
* Changed readFile and readBinaryFile to read data from Meteor server
* Added alasql.path
* Test program improved

### 0.1.5 "San Marino" (12.05.2015 - 12.05.2015)
* Added Meteor package (agershun:alasql) - still does not work - skeleton
* Northwind test database - test for speed and SQL
* Added w3 database (Northwind analogue)
* Fixed FOREIGN KEY problem

### 0.1.4 "Napoli" (09.05.2015 - 11.05.2015)
* Convert Meteor/Mongo collections on the fly 
* Added METEOR() from-function
* Fixed $[0] -> $0 for parameters
* utils/2ch.js - utility for minification of AlaSQL (calculate size of economy)
* d3 graph path samples
* alasql.options.autovertex flag - create vertices if not found
* EQ() selector
* LIKE selector
* RETURNS selector - return record with columns like in SELECT
* ALL() and ANY() selectors
* Added CREATE TABLE column UNIQUE constraint on INSERT/DELETE/UPDATE
* Added OBJECT_ID() function (like in T-SQL)
* Added parts and optional for specific database compatibility
* Changed REFERENCES syntax
* dbo always as default database (for some compatibility with T-SQL)
* NOT NULL check on INSERT/UPDATE
* CHECK constraint (for whole table)
* CURRENT_TIMESTAMP function
* UNIQUE constraint (whole table)
* VARCHAR(MAX)
* CHECK constraint for columns
* FOREIGN KEYS for columns and tables

### 0.1.3 "Vaticano" (08.05.2015 - 09.05.2015)
* Check for null values for SEARCH
* ORDER BY for SEARCH operator
* Brackets for SEARCH selectors (WITH() selector)
* SEARCH DISTINCT, UNION ALL, UNION selectors
* Added simple PATH() selector

### 0.1.2 "Firenze" (06.05.2015 - 07.05.2015)
* Simple compilation of SEARCH operator
* SUM(),COUNT(),MIN(),MAX(),FIRST(),LAST() search aggregators
* The # operator, CREATE VERTEX #
* SEARCH # - start with object
* SERCH smth # - test for object
* SEARCH VALUE - leave only one first object in the result
* Bug in browser version (no global object)
* Changed Bower
* CREATE GRAPH
* Minor changes in SEARCH over XML syntax
* New tests added

### 0.1.1 "Milano" (03.05.2015 - 04.05.2015)
* XLSXML() into- function with colors
* $$hashKey - remove Angular's key
* CREATE VERTEX, CREATE EDGE
* SEARCH objects
* SEARCH graph
* "name" as name for graph vertices and edges
* Added INSTANCEOF selector
* Added CLASS selector
* * selector, + selector, ? selector, !selector for SEARCH in JSON and graphs
* XML() from function
* SEARCH INTO functions

## 0.1.0 (aka 0.0.52) "Venice" (02.05.2015 - 03.05.2015)
* Added INFORMATION_SCHEMA from variable
* Fixed localstorage dropTable with AUTOCOMMIT OFF
* STD() function added, STDEV(),STEDEVP(),VAR(),VARP()
* DISTINCT and ALL with custom aggregators (like STD(DISTINCT a))
* UNION problem fixed
* IE9 - save plain text and XLS()

### 0.0.51 "Rimini" (23.04.2015 - 02.05.2015)
* alasql.options.modifier flag added
* alasql.options.columnlookup flag added
* SELECT * REMOVE COLUMNS a,b 
* SELECT * REMOVE COLUMNS LIKE 'b%' 
* Remove columns from .columns schema
* Custom aggregators - added additional calls (init and in the cycle)
* Added MEDIAN() aggregator

### 0.0.50 "Seoul" (21.04.2015 - 22.04.2015)
* CREATE VERTEX and CREATE EDGE syntax
* Fixed MIN and MAX functions and aggregators #93
* Found UPDATE bug with column/columnid
* Fixed bug with valueOf in comparision

### 0.0.49 "Beijing" (19.04.2015 - 21.04.2015)
* CREATE CLASS
* INSERT INTO class
* INSERT INTO class returns inserted value
* The # operator
* Classes support
* Tests with SEARCH syntax and tests for CREATE EDGE and CREATE VERTES
* Fixed bug with leaking to global.key

### 0.0.48 "Amsterdam" (18.04.2015 - 19.04.2015)
* Fixed bug indexedDB.webGetDatabaseNames in Firefox
* Some bugs from Sqllogictest fixed (see test258)
* Bower package registered
* Fixed CASE bonding query to this error

### 0.0.47 "Antalya" (16.04.2015 - 18.04.2015)
* Added CORRESPONDING keyword to the grammas
* Fixed export to Excel - with data types
* New version of FileSaver is updated
* New INTO XLS() function with colors(!)
* Added params parameter to intoallfn()
* master and develop branches fixed

### 0.0.46 "Cape Town" (14.04.2015 - 14.04.2015)
* Cleaned 'test' directory
* Fixed problem with tests
* Fixed bug with localStorage DELETE FROM (without WHERE)

### 0.0.45 "Rio de Janeiro" (13.04.2015 - 13.04.2015)
* Changed CRLF for alacon.js and alaserver.js to LF

### 0.0.44 "Roma" (02.04.2015 - 13.04.2015)
* Added params to SQLite attached database: alasql('ATTACH SQLITE DATABASE a(?)',[event],cb);
* Root directory was cleaned
* Gulp version is updated
* Fixed bug with (SELECT) and EXISTS() in SELECTS with GROUP BY

### 0.0.43 "The Wall" (25.03.2015 - 01.04.2015)
* Created "develop" branch for git-flow
* Fixed GREATEST and LEAST() bugs
* Added flags {sourcefilename: "aaa", range:"B4"} to INTO XLSX() function
* CREATE TABLE one(two,three) - without coulmn types

### 0.0.42 "Robin" (17.03.2015 - 25.03.2015)
* MAX() and MIN() math functions renamed to GREATEST() and LEAST()
* ORDER BY 2,1
* :: casting operator
* UNARY PLUS
* NOT LIKE
* NOT\sLIKE and NOT\sBETWEEN for multiple spaces
* Removed "Test238"

### 0.0.41 "Eagle" (12.03.2015 - 17.03.2015)
* `column` for column names
* ``JavaScript expression`` for JavaScript
* Changed package.json (main:alasql.js)

### 0.0.40 "Sapsan" (24.01.2015 - 06.03.2015)

* IF EXISTS() and subqueries
* MERGE syntax
* alasql('#sql1');
* alasql(document.querySelector('#sql'));
* alasql(function(){/* SELECT 100 */}); for multiline SQL statements
* SELECT one.a,one.b INTO "one.xlsx" FROM "one.json" AS one
* Cut first BOM character when reading text files in UTF-8
* LIKE is case-insensitive

### 0.0.39 "Everest" (17.01.2015 - 23.01.2015)

* `JavaScript()` expressions and statements SELECT `Math.random()*100`
* Added conversion to number for strings like: ' 123 '
* Fixed from HTML() function (childNodes -> children)
* CREATE FILE DATABASE IF NOT EXISTS "filename.json"
* DROP FILE DATABASE IF EXISTS "filename.json"
* SELECT a->(1+1) - show ( and ) in toString() function
* CROSS APPLY and OUTER APPLY (!)
* Float numbers like 10e20
* SELECT COLUMN a+(SELECT MAX(b) FROM one) FROM one - SELECT in Expressions
* Turned off WHERE optimization (due some problem with indices)
* OVER PARTITION and OVER ORDER syntax
* NIST SQL Example Tests passed (except constrains and subquery in delete)
* Errors handling
* SET ERRORLOG ON/OFF (trap errors)
* COALESCE() function skips NaN values as well as NULL
* SET CACHE ON/OFF - turn on/off SQL statements caching
* loadFileFrom('#selector') - to read data from HTML <tag> 

### 0.0.38 "Elbrus" (17.01.2015 - 17.01.2015)

* Additional wrapper for FileSaver to work with R and V8 (http://cran.r-project.org/web/packages/V8/vignettes/v8_intro.html)
* Fixed ROLLUP, CUBE and GROUPING SETS()
* Added Apache Cordova for Windows 8 support


### 0.0.37 "Ararat" (09.01.2015 - 16.01.2015)

* Added test for "? IN @(?)"
* Convert  -> correct DATE("20141008")
* TRUNCATE TABLE table;
* Fixed bug when COUNT and SUM() aggregators shows 'undefined' with zero groups
* test-sql tests for compatibility with other databases
* SELECT TEXT -> SELECT TEXTSTRING (do not conflict with TEXT data type)
* Fixed bug: different databases for different FROM and JOIN parts
* Google Spreadsheet integration with Tabletop (https://github.com/jsoma/tabletop) FROM-function: alasql('SELECT * FROM TABLETOP(?)',[url]);
* Changed worker() method
* DECLARE with multiple variable definitions and initial value (DECLARE @one int = 123)
* SET a->property->0->(1+1) = 100
* Views: CREATE VIEW, DROP VIEW, SELECT FROM VIEW, JOIN VIEW
* Multi line comments /* */
* WITH SELECT statement
* Appach Cordova loadFile and saveFile procedures
* Test Alasql with Cordova on iPhone, iOS emulator, and Android emulator, Windows 8
* Fixed bug with npm install (bin directory)
* Fixed bug in localStorage with local variable
* fileExists() function
* FILESTORAGE engine for Node.js and Apach Cordova


### 0.0.36 "Happy New Year" (23.12.2014 - 08.01.2015)

* REDUCE Aggregator for custom aggregators
* LINQ functions (fluent interface):
 * alasql() or alasql(data)
 * From()
 * Where()
 * OrderBy()
 * GroupBy()
 * Having()
 * Select()
 * Top()
* RANGE(1,10) - from function => [1,2,3,4,5,6,7,8,9,10]
* HTML-from and into functions
* Clean root directory
* GO keyword as semicolon
* global alasql => var alasql
* SELECT * INTO SQL() FROM ? - into-function for generating INSERTS
* SELECT TOP 10 PERCENT * FROM ?
* ORDER BY _ - fixed
* ORDER BY formula (ORDER BY MID(a,2,1))
* GROUP BY formula (GROUP BY MID(a,1,1))
* HAVING with formulas (HAVING COUNT(*)>1)
* Fixed COUNT(*) and COUNT(expression)
* COUNT(DISTINCT all)
* Subquery SELECT (SELECT)
* IF expr statement 
* OBJECT_ID(tableid) function
* IS NULL and IS NOT NULL operators
* SET option value (ON/OFF)
* OVER PARTITION ORDER BY syntax
* SET option ON/OFF (alasql.options.autocommit)
* SUM(DISTINCT a)
* Create table column NULL constraint syntax
* WebWorker (alasql-worker.js)
* GETDATE() returns date 
* PRINT statement
* Tests renumbered and fixed
* REQUIRE 'plugin.js'
* alasql.worker("../alasql.js", ["plugins.js",...], callback)
* @localvariable
* SET @localvariable = expression
* WHILE, CONTINUE, BREAK, BEGIN END syntax
* WHILE statement
* alasql.worker() - run WebWorker
* alasql-worker.js - library to run webworker
* FROM @localvariable
* SELECT INTO @localvariable
* CONVERT(type,value,style)
* Fixed multiple same aggregators bug
* DECLARE @locarvariable type

### 0.0.35 (14.12.2014 - 22.12.2014)

* Added [?] array conversion
* ARRAY Aggregator (http://stackoverflow.com/questions/15887900/group-objects-by-property-in-javascript?rq=1)
* _ column for whole record
* SELECT INDEX
* SELECT RECORDSET
* SELECT TEXTSTRING

### 0.0.34 (14.12.2014 - 20.12.2014)

* New User Manual written
* Remove $$hashKey field for Angular.js integration
* New CSV and TAB parser with separators and quotes
* Fixed USING bug
* Fixed HAVING bug
* INTO JSON function() 

### 0.0.33 (12.12.2014 - 14.12.2014)

* SQL.js engine adapter (to real SQLite database)

### 0.0.32 (12.12.2014 - 14.12.2014)

* Read XLS and XLSX files (with xlsx package)
* AT is no longer required for json-objects @{}
* Stdin and stdout functions for Alacon (INTO TXT() FROM TXT())

### 0.0.31 (10.12.2014 - 11.12.2014)

* INSERT and DELETE for IndexedDB
* New tests for FROM and INTO functions
* UPDATE for IndexedDB
* DOM-storage support for Node.js (test159.js)


### 0.0.30 (03.12.2014 - 09.12.2014)

* Async version (except streamming)
* Fixed a hundred bugs after changes to async/sync version
* IndexedDB support (except INSERT/DELETE/UPDATE)
* DOM-Storage support (pull request #15)
* Grammar for STORE/RESTORE commands (for key-value storages)

### 0.0.29 (29.11.2014 - 02.12.2014)

* INSERT/DELETE/UPDATE for localStorage AUTOCOMMIT ON mode
* ROLLBACK for localStorage bug

### 0.0.28 (29.11.2014 - 01.12.2014)

* SET AUTOCOMMIT ON|OFF 
* localStorage in AUTOCIMMIT ON mode (without INSERT/DELETE/UPDATE)
* localStorage in AUTOCIMMIT OF mode (simple COMMIT)

### 0.0.27 (27.11.2014 - 29.11.2014)

* Function as a source of data for FROM ? AND JOIN ?
* Virtualization of source
* Query as a source in joins
* Multiple databases
* SELECT * INTO into-function() FROM from-function() 


### 0.0.26 (26.11.2014 - 26.11.2014)

* Show time in ms in Alasql Console
* JSON Object functions like d->getFullYear()
* JavaScript Dates
* SQL DATE functions
* alasql.stdfn() - runtime library
* CREATE TABLE AND INSERT with Date
* new Date()

### 0.0.25 (23.11.2014 - 25.11.2014)

* CAST(expression AS type)
* CONVERT(type, expression)
* alasql.options.datetimeformat = 'sql' / 'javascript' for CAST
* loadFile works in Node.js (changes some tests)
* SELECT VALUE
* SELECT ROW
* SELECT COLUMN
* SELECT MATRIX
* JSON(json-object)
* == and !== for deepEqual
* alacon - alasql console (to run: node alacon sql params...)
* Json property operator - JSON({a:1,b:[2,3]})->b->1 => 2
* Alaserver - server for Alasql

### 0.0.24 (23.11.2014 - 23.11.2014)

* Fixed LIKE operator (added ^ and $)
* Changed LOAD to SOURCE (like in MySQL)
* ASSERT operator
* JSON parser for ASSERT operator
* Fixed LIKE bug (need more attention)
* Fixed bug with default column names

### 0.0.23 (22.11.2014 - 22.11.2014)

* LOAD 'url.sql' - load and execute sql statements
* HELP - help on Alasql commands

### 0.0.22 (20.11.2014 - 22.11.2014)

* SELECT UNIQUE
* SELECT MINUS SELECT
* RENAME TABLE table TO literal
* ALTER TABLE table RENAME COLUMN column TO column
* ALTER TABLE table DROP COLUMN column
* Double quoter sign '' and \\' translates into '
* Test with World and Neptuno databases for compatibility
* alasql.test(), alasql.log(), alasql.write(), alasql.writep()
* Console

### 0.0.21 (19.11.2014 - 20.11.2014)

* SELECT a AS q, b w FROM one - AS is not required
* Comments '--' and '/* */' - single line
* Double quote sign in the string 'Bon''appetite'
* Compatibility with World Database (http://dev.mysql.com/doc/world-setup/en/index.html)
 * `literal` in backquotes like literal in square brackets [literal]
 * Additional grammar for ENGINE, CHARSET, etc. and other keywords for World database

### 0.0.20 (19.11.2014)

* SHOW DATABASES
* SHOW TABLES
* SHOW COLUMNS
* SHOW INDIEX (not fully)
* CREATE VIEW syntax
* Case-sensivity

### 0.0.19 (19.11.2014 - 19.11.2014)

* User-defined functions are database specific.
* Names in [brackets]

### 0.0.18 (15.11.2014 - 18.11.2014)

* Added more tests
* Some minor bugs

### 0.0.17 (13.11.2014 - 14.11.2014)

* Changed approach to execute and compilations
* Broke transactions (to be reviewed)

### 0.0.16 (11.11.2014 - 12.11.2014)

* PRIMARY KEY and FOREIGN KEY parser
* Use array of arrays as parameter value for FROM clause, column names like \[2\] or table\[0\] 
* alasql.queryArrayOfArrays(), utils.arrayOfArrays()
* PRIMARY KEY ON inseert, delete, update with one or multiple keys
* Fixed Uppercase and LowerCase problem
* CREATE DATABASE, USE DATABASE, DROP DATABASE
* CROSS and NATURAL JOINs
* RANDOM
* INSERT INTO table DEFAULT VALUES
* CREATE TABLE table (column type DEFAULT value)


### 0.0.15 (10.11.2014)

* alasql.userlib replaces with alasql.fn
* Fixed gulpfile.js
* CommonJS/AMD/UMD and require.js test
* alasql(sql, params, callback) function
* SELECT * FROM one AS t
* alasql('SELECT * FROM ? AS t', [data]); - array as subquery


### 0.0.14.5 (10.11.2014)

* valueOf() instead +Date();
* Date tests added
* INSERT date

### 0.0.14.4 (10.11.2014)

* Negative numbers 
* Float numbers
* Strings with single and double quaters
* CASE WHEN THEN END
* ROUND, MID

### 0.0.14.3 (09.11.2014)

* RIGHT / OUTER / SEMI / ANTI Joins!

### 0.0.14.2 (07.11.2014-08.11.2014)

* Added more tests

### 0.0.14.1 (07.11.2014-08.11.2014)

* Added more tests
* Minor bugs fixed
* Database.queryArray method()

### 0.0.14 (07.11.2014-08.11.2014)

* SELECT INTERSECT, EXCEPT
* BETWEEN, NOT BETWEEN
* Fixed problem wuth source.srcwherefn and query.wherefn
* IN (Subquery), NOT IN(Subquery) - IN(array)
* alasql.parser.parse renamed to alasql.parse
* Reduced AST tree in case of srcwherefn and wherefn optimizations in joins
* % (MODULO) operator (9%7 == 2)
* Fix 'undefined' column if alias is not exists
* x > ALL (subquery), x > SOME/ANY (subquery)
* Check if table exists in the database
* Multiple user defined functions arguments, like TRIPLE(a,b,c)
* SELECT TOP (as well as SELECT query LIMIT OFFSET)
* Fixed ALTER TABLE RENAME TO statement
* LEN(), UCASE(), LCASE(), UPPER(), LOWER(), NOW()
* Simple matching with LIKE '%day%'
* INSERT INTO test VALUES('a'),('10'),('20'),('c'),('30'),('d');
* SELECT INTO table SELECT query

### 0.0.13 (06.11.2014)

* FIRST(), LAST()
* Minor bugs with EXISTS 

### 0.0.12 (06.11.2014)

* SELECT * FROM test WHERE EXISTS(SELECT * FROM test2 WHERE test1.a = test2.a)
* User-defined functions (alasql.usrlib)

### 0.0.11 (06.11.2014)

* SELECT * FROM (SELECT * FROM test) t

### 0.0.10 (06.11.2014)

* SELECT UNION
* Started SQL tests

### 0.0.9 (06.11.2014)

* ROLLUP, CUBE, GROUPING SETS support

### 0.0.8 (06.11.2014)

* Minor bugs

### 0.0.7 (06.11.2014)

* WHERE column = expression optmization (creare index)

### 0.0.6 (04.11.2014)

* Developed new parser based on Jison
* Use Gulp for development platform
* Where optimization
* New names for fields => columns and recs => data

### 0.0.5 (30.10.2014)

* Changed order of LIMIT and ORDER BY processing

### Version 0.0.4 (28.10.2014-29.10.2014)

* Added /test/main.html mocha browser tests
* Added PERFORMANCE.md and perf.html tests
* StringValue.toJS()
* Added callback to Database.exec
* Sieve of Eratosthenes example
* Remove generation of recs after select in case of group by (for memory optimization)
* Added conversion for type MONEY for INSERT statement 

### Versions 0.0.1 - 0.0.3 (25.10.2014-27.10.2014)

* First version of Alasql



================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute to AlaSQL

Thank you very much for your interest! AlaSQL has a lot of thing to be improved, and your help is very appreciated! 

For you to submit a pull request: 

- Make sure you have git, Node and yarn installed (`npm install -g yarn`)
- Fork the repo here on Github (button top right)
- Clone your forked repo and install dependencies `git clone https://github.com/MYUSERNAME/alasql/ --depth 1 && cd alasql && yarn` 
- Make sure you work with the develop branch `git checkout develop`
- Make sure you got dependencies installed `yarn`
- Run tests to verify all is good `yarn test`
- Implement a test that reflects the issue.
  - Add a new test file for the issue: Copy `test/test000.js` and replace `000` with a new number. Preferably the number of the issue you are solving.
- Run `yarn test` to verify only the new test fails
- Implement your contributions in `src/`
- Run `yarn test` and verify all tests are OK
- Format the souce with `yarn format`
- Commit changes to git and push to your forked repo
- Click "Create Pull-request" when looking at your forked repo on Github

Please note that 
- `yarn test` will compile from `src/` and overwrite `dist/` before running tests
- If you would like to change the alasql.org website please make a PR to https://github.com/alasql/alasql-org
- To help debug a problem you can see some advice on https://github.com/AlaSQL/alasql/issues/1415#issuecomment-1293335079
 


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2014 - present  Andrey Gershun

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
- _AlaSQL is an unfunded open source project installed 650k+ times each month. [Please donate your time](https://github.com/AlaSQL/alasql/issues?q=is%3Aopen+label%3A%22Help+wanted%22+sort%3Aupdated-desc). We appreciate any and all contributions we can get._

- _Have a question? [Ask The AlaSQL Bot](https://chatgpt.com/g/g-XcBL24WTe-alasql-bot) or post on [Stack Overflow](http://stackoverflow.com/questions/ask?tags=AlaSQL)._

[![CI-test](https://github.com/alasql/alasql/workflows/CI%20build%20&%20test/badge.svg)](https://github.com/alasql/alasql/actions)
[![NPM downloads](http://img.shields.io/npm/dm/alasql.svg?style=flat&label=npm%20downloads)](https://npm-stat.com/charts.html?package=alasql)
[![OPEN open source software](https://img.shields.io/badge/Open--OSS-%E2%9C%94-brightgreen.svg)](http://open-oss.com)
[![Release](https://img.shields.io/github/release/alasql/alasql.svg?label=npm&a)](https://www.npmjs.com/package/alasql)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/AlaSQL/alasql.svg)](http://isitmaintained.com/project/AlaSQL/alasql 'Average time to resolve an issue')
[![Coverage](https://img.shields.io/codecov/c/github/alasql/alasql/develop.svg)](https://rawgit.com/alasql/alasql/develop/test/coverage/lcov-report/dist/alasql.fs.js.html)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/AlaSQL/alasql/badge)](https://securityscorecards.dev/viewer/?uri=github.com/AlaSQL/alasql)
[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/328/badge)](https://bestpractices.coreinfrastructure.org/projects/328)
[![](https://data.jsdelivr.com/v1/package/npm/alasql/badge?style=rounded)](https://www.jsdelivr.com/package/npm/alasql)
[![Stars](https://img.shields.io/github/stars/alasql/alasql.svg?label=Github%20%E2%98%85&a)](https://github.com/alasql/alasql)

# AlaSQL

<h2 align="center"><a href="http://alasql.org"><img src="https://cloud.githubusercontent.com/assets/1063454/19309516/94f8007e-9085-11e6-810f-62fd60b42185.png" alt="AlaSQL logo" styl="max-width:80%"/></a>
</h2>

AlaSQL - _( [à la](http://en.wiktionary.org/wiki/%C3%A0_la) [SQL](http://en.wikipedia.org/wiki/SQL) ) [ælæ ɛskju:ɛl]_ - is an open source SQL database for JavaScript with a strong focus on query speed and data source flexibility for both relational data and schemaless data. It works in the web browser, Node.js, and mobile apps.

This library is perfect for:

- Fast in-memory SQL data processing for BI and ERP applications on fat clients
- Easy ETL and options for persistence by data import / manipulation / export of several formats
- All major browsers, Node.js, and mobile applications

We focus on [speed](https://github.com/alasql/alasql/wiki/Speed) by taking advantage of the dynamic nature of JavaScript when building up queries. Real-world solutions demand flexibility regarding where data comes from and where it is to be stored. We focus on flexibility by making sure you can [import/export](https://github.com/alasql/alasql/wiki/Import-export) and query directly on data stored in Excel (both `.xls` and `.xlsx`), CSV, JSON, TAB, IndexedDB, LocalStorage, and SQLite files.

The library adds the comfort of a full database engine to your JavaScript app. No, really - it's working towards a full database engine complying with [most of the SQL-99 language](https://github.com/alasql/alasql/wiki/Supported-SQL-statements), spiced up with additional syntax for NoSQL (schema-less) data and graph networks.

#### Traditional SQL Table

```js
/* create SQL Table and add data */
alasql('CREATE TABLE cities (city string, pop number)');

alasql("INSERT INTO cities VALUES ('Paris',2249975),('Berlin',3517424),('Madrid',3041579)");

/* execute query */
var res = alasql('SELECT * FROM cities WHERE pop < 3500000 ORDER BY pop DESC');

// res = [ { "city": "Madrid", "pop": 3041579 }, { "city": "Paris", "pop": 2249975 } ]
```

[Live Demo](https://jsfiddle.net/jqk80ard/)

#### Array of Objects

```js
var data = [
	{a: 1, b: 10},
	{a: 2, b: 20},
	{a: 1, b: 30},
];

var res = alasql('SELECT a, SUM(b) AS b FROM ? GROUP BY a', [data]);

// res = [ { "a": 1, "b": 40},{ "a": 2, "b": 20 } ]
```

[Live Demo](https://jsfiddle.net/8brvex4f/)

#### Spreadsheet

```js
// file is read asynchronously (Promise returned when SQL given as array)
alasql([
	'SELECT * FROM XLS("./data/mydata") WHERE lastname LIKE "A%" and city = "London" GROUP BY name ',
])
	.then(function (res) {
		console.log(res); // output depends on mydata.xls
	})
	.catch(function (err) {
		console.log('Does the file exist? There was an error:', err);
	});
```

#### Bulk Data Load

```js
alasql('CREATE TABLE example1 (a INT, b INT)');

// alasql's data store for a table can be assigned directly
alasql.tables.example1.data = [
	{a: 2, b: 6},
	{a: 3, b: 4},
];

// ... or manipulated with normal SQL
alasql('INSERT INTO example1 VALUES (1,5)');

var res = alasql('SELECT * FROM example1 ORDER BY b DESC');

console.log(res); // [{a:2,b:6},{a:1,b:5},{a:3,b:4}]
```

**If you are familiar with SQL, it should be no surprise that proper use of indexes on your tables is essential for good performance.**

#### Options

AlaSQL has several [configuration options](https://github.com/AlaSQL/alasql/wiki/AlaSQL-Options) which change the behavior. It can be set via SQL statements or via the options object before using `alasql`.

If you're using `NOW()` in queries often, setting `alasql.options.dateAsString` to `false` speed things up. It will just return a JS Date object instead of a string representation of a date.

## Installation

```bash
yarn add alasql                # yarn

npm install alasql             # npm

npm install -g alasql          # global install of command line tool
```

For the browsers: include [alasql.min.js](https://cdn.jsdelivr.net/npm/alasql)

```html
<script src="https://cdn.jsdelivr.net/npm/alasql@4"></script>
```

## Getting started

See the ["Getting started" section of the wiki](https://github.com/alasql/alasql/wiki/Getting%20started)

More advanced topics are covered in other wiki sections like ["Data manipulation"](https://github.com/alasql/alasql/wiki/Data-manipulation) and in questions on [Stack Overflow](http://stackoverflow.com/questions/tagged/alasql)

Other links:

- Documentation: [Github wiki](https://github.com/alasql/alasql/wiki)

- Library CDN: [jsDelivr.com](http://www.jsdelivr.com/#!alasql)

- Feedback: [Open an issue](https://github.com/alasql/alasql/issues/new)

- Try online: <a href="http://alasql.org/console?CREATE TABLE cities (city string, population number);INSERT INTO cities VALUES ('Rome',2863223), ('Paris',2249975),('Berlin',3517424), ('Madrid',3041579);SELECT * FROM cities WHERE population < 3500000 ORDER BY population DESC">Playground</a>

- Website: [alasql.org](http://AlaSQL.org)

## Please note

**All contributions are extremely welcome and greatly appreciated(!)** -
The project has never received any funding and is based on unpaid voluntary work: [We really (really) love pull requests](https://github.com/alasql/alasql/blob/develop/CONTRIBUTING.md)

The AlaSQL project depends on your contribution of code and <s>may</s> have [bugs](https://github.com/alasql/alasql/labels/%21%20Bug). So please, submit any bugs and suggestions [as an issue](https://github.com/alasql/alasql/issues/new).

Please check out the [limitations of the library](https://github.com/alasql/alasql#limitations).

## Performance

AlaSQL is designed for speed and includes some of the classic SQL engine optimizations:

- Queries are cached as compiled functions
- Joined tables are pre-indexed
- `WHERE` expressions are pre-filtered for joins

See more [performance-related info on the wiki](https://github.com/alasql/alasql/wiki/Speed)

## Features you might like

### Traditional SQL

Use "good old" SQL on your data with multiple levels of: `JOIN`, `VIEW`, `GROUP BY`, `UNION`, `PRIMARY KEY`, `ANY`, `ALL`, `IN`, `ROLLUP()`, `CUBE()`, `GROUPING SETS()`, `CROSS APPLY`, `OUTER APPLY`, `WITH SELECT`, and subqueries. [The wiki lists supported SQL statements and keywords](https://github.com/alasql/alasql/wiki/SQL%20keywords).

### User-Defined Functions in your SQL

You can use all benefits of SQL and JavaScript together by defining your own custom functions. Just add new functions to the alasql.fn object:

```js
alasql.fn.myfn = function (a, b) {
	return a * b + 1;
};
var res = alasql('SELECT myfn(a,b) FROM one');
```

You can also define your own aggregator functions (like your own `SUM(...)`). See more [in the wiki](https://github.com/alasql/alasql/wiki/User-Defined-Functions)

### Compiled statements and functions

```js
var ins = alasql.compile('INSERT INTO one VALUES (?,?)');
ins(1, 10);
ins(2, 20);
```

See more [in the wiki](https://github.com/alasql/alasql/wiki/Compile)

### SELECT against your JavaScript data

Group your JavaScript array of objects by field and count number of records in each group:

```js
var data = [
	{a: 1, b: 1, c: 1},
	{a: 1, b: 2, c: 1},
	{a: 1, b: 3, c: 1},
	{a: 2, b: 1, c: 1},
];
var res = alasql('SELECT a, COUNT(*) AS b FROM ? GROUP BY a', [data]);
```

See more ideas for creative data manipulation [in the wiki](https://github.com/alasql/alasql/wiki/Getting-started)

### JavaScript Sugar

AlaSQL extends "good old" SQL to make it closer to JavaScript. The "sugar" includes:

- Write Json objects - `{a:'1',b:@['1','2','3']}`

- Access object properties - `obj->property->subproperty`
- Access object and arrays elements - `obj->(a*1)`
- Access JavaScript functions - `obj->valueOf()`
- Format query output with `SELECT VALUE, ROW, COLUMN, MATRIX`
- Output nested objects with `INTO OBJECT()` - converts arrow notation columns back to nested structure
- ES5 multiline SQL with `var SQL = function(){/*SELECT 'MY MULTILINE SQL'*/}` and pass instead of SQL string (will not work if you compress your code)

#### Extracting Nested Properties with INTO OBJECT()

When selecting nested properties using arrow notation (`->`), results are normally flattened with the arrow path as the key. Use `INTO OBJECT()` to restore the nested structure:

```js
var data = [{name: 'Oslo', info: {country: 'Norway', population: 700000}}];

// Standard output (flattened)
alasql('SELECT name, info->country FROM ?', [data]);
// [{ "name": "Oslo", "info->country": "Norway" }]

// With INTO OBJECT() (nested)
alasql('SELECT name, info->country INTO OBJECT() FROM ?', [data]);
// [{ "name": "Oslo", "info": { "country": "Norway" } }]
```

### Read and write Excel and raw data files

You can import from and export to CSV, TAB, TXT, and JSON files. File extensions can be omitted. Calls to files will always be asynchronous so multi-file queries should be chained:

```js
var tabFile = 'mydata.tab';

alasql
	.promise([
		"SELECT * FROM txt('MyFile.log') WHERE [0] LIKE 'M%'", // parameter-less query
		['SELECT * FROM tab(?) ORDER BY [1]', [tabFile]], // [query, array of params]
		"SELECT [3] AS city,[4] AS population FROM csv('./data/cities')",
		"SELECT * FROM json('../config/myJsonfile')",
	])
	.then(function (results) {
		console.log(results);
	})
	.catch(console.error);
```

### Read SQLite database files

AlaSQL can read (but not write) SQLite data files using [SQL.js](https://github.com/sql-js/sql.js) library:

```html
<script src="alasql.js"></script>
<script src="sql.js"></script>
<script>
	alasql([
		'ATTACH SQLITE DATABASE Chinook("Chinook_Sqlite.sqlite")',
		'USE Chinook',
		'SELECT * FROM Genre',
	]).then(function (res) {
		console.log('Genres:', res.pop());
	});
</script>
```

`sql.js` calls will always be asynchronous.

### AlaSQL works in the console - CLI

The node module ships with an `alasql` command-line tool:

```bash
$ npm install -g alasql ## install the module globally

$ alasql -h ## shows usage information

$ alasql "SET @data = @[{a:'1',b:?},{a:'2',b:?}]; SELECT a, b FROM @data;" 10 20
[ 1, [ { a: 1, b: 10 }, { a: 2, b: 20 } ] ]

$ alasql "VALUE OF SELECT COUNT(*) AS abc FROM TXT('README.md') WHERE LENGTH([0]) > ?" 140
// Number of lines with more than 140 characters in README.md
```

[More examples are included in the wiki](https://github.com/alasql/alasql/wiki/AlaSQL-CLI)

## Features you might love

### AlaSQL ♥ D3.js

AlaSQL plays nice with d3.js and gives you a convenient way to integrate a specific subset of your data with the visual powers of D3. See more about [D3.js and AlaSQL in the wiki](https://github.com/alasql/alasql/wiki/d3.js)

### AlaSQL ♥ Excel

AlaSQL can export data to both [Excel 2003 (.xls)](https://github.com/alasql/alasql/wiki/XLS) and [Excel 2007 (.xlsx)](https://github.com/alasql/alasql/wiki/XLSX) formats with coloring of cells and other Excel formatting functions.

### AlaSQL ♥ Meteor

Meteor is amazing. You can query directly on your Meteor collections with SQL - simple and easy. See more about [Meteor and AlaSQL in the wiki](https://github.com/alasql/alasql/wiki/Meteor)

### AlaSQL ♥ Angular.js

Angular is great. In addition to normal data manipulation, AlaSQL works like a charm for exporting your present scope to Excel. See more about [Angular and AlaSQL in the wiki](https://github.com/alasql/alasql/wiki/Angular.js)

### AlaSQL ♥ Google Maps

Pinpointing data on a map should be easy. AlaSQL is great to prepare source data for Google Maps from, for example, Excel or CSV, making it one unit of work for fetching and identifying what's relevant. See more about [Google Maps and AlaSQL in the wiki](https://github.com/alasql/alasql/wiki/Google-maps)

### AlaSQL ♥ Google Spreadsheets

AlaSQL can query data directly from a Google spreadsheet. A good "partnership" for easy editing and powerful data manipulation. See more about [Google Spreadsheets and AlaSQL in the wiki](https://github.com/alasql/alasql/wiki/Google-Spreadsheets)

### Miss a feature?

Take charge and [add your idea](http://feathub.com/alasql/alasql/features/new) or [vote for your favorite feature](http://feathub.com/alasql/alasql) to be implemented:

[![Feature Requests](http://feathub.com/alasql/alasql?format=svg)](http://feathub.com/alasql/alasql)

## Limitations

Please be aware that AlaSQL has [bugs](https://github.com/alasql/alasql/labels/Bug). Beside having some bugs, there are a number of limitations:

0. AlaSQL has a (long) list of keywords that must be escaped if used for column names. When selecting a field named `key` please write ``SELECT `key` FROM ...`` instead. This is also the case for words like `` `value` ``, `` `read` ``, `` `count` ``, `` `by` ``, `` `top` ``, `` `path` ``, `` `deleted` ``, `` `work` `` and `` `offset` ``. Please consult the [full list of keywords](https://github.com/alasql/alasql/wiki/AlaSQL-Keywords).

1. It is OK to `SELECT` 1000000 records or to `JOIN` two tables with 10000 records in each (You can use streaming functions to work with longer datasources - see [test/test143.js](test/test143.js)) but be aware that the workload is multiplied so `SELECT`ing from more than 8 tables with just 100 rows in each will show bad performance. This is one of our top priorities to make better.

2. Limited functionality for transactions (supports only for localStorage) - Sorry, transactions are limited, because AlaSQL switched to more complex approach for handling `PRIMARY KEY`s / `FOREIGN KEY`s. Transactions will be fully turned on again in a future version.

3. A `(FULL) OUTER JOIN` and `RIGHT JOIN` of more than 2 tables will not produce expected results. `INNER JOIN` and `LEFT JOIN` are OK.

4. Please use aliases when you want fields with the same name from different tables (`SELECT a.id AS a_id, b.id AS b_id FROM ?`).

5. At the moment AlaSQL does not work with JSZip 3.0.0 - please use version 2.x.

6. `JOIN`ing a sub-`SELECT` does not work. Please use a `with` structure ([Example here](https://github.com/alasql/alasql/issues/832#issuecomment-377574550)) or fetch the sub-`SELECT` to a variable and pass it as an argument ([Example here](https://github.com/alasql/alasql/issues/832#issuecomment-377559478)).

7. AlaSQL uses the [FileSaver.js](https://github.com/eligrey/FileSaver.js/) library for saving files locally from the browser. Please be aware that it does not save files in Safari 8.0.

There are probably many others. Please help us fix them by [submitting an issue](https://github.com/alasql/alasql/issues). Thank you!

## How To

### Use AlaSQL to convert data from CSV to Excel

ETL example:

```js
alasql([
	'CREATE TABLE IF NOT EXISTS geo.country',
	'SELECT * INTO geo.country FROM CSV("country.csv",{headers:true})',
	'SELECT * INTO XLSX("asia") FROM geo.country WHERE continent_name = "Asia"',
]).then(function (res) {
	// results from the file asia.xlsx
});
```

### Use AlaSQL as a Web Worker

AlaSQL can run in a Web Worker. Please be aware that all interaction with AlaSQL when running must be async.

From the browser thread, the browser build `alasql-worker.min.js` automagically uses Web Workers:

```html
<script src="alasql-worker.min.js"></script>
<script>
	var arr = [{a: 1}, {a: 2}, {a: 1}];

	alasql([['SELECT * FROM ?', [arr]]]).then(function (data) {
		console.log(data);
	});
</script>
```

[Live Demo](https://jsfiddle.net/3vnmu2fo).

The standard build `alasql.min.js` will use Web Workers if `alasql.worker()` is called:

```html
<script src="alasql.min.js"></script>
<script>
	alasql.worker();
	alasql(['SELECT VALUE 10'])
		.then(function (res) {
			console.log(res);
		})
		.catch(console.error);
</script>
```

[Live Demo](http://jsfiddle.net/osxvdp5k/).

From a Web Worker, you can import `alasql.min.js` with `importScripts`:

```js
importScripts('alasql.min.js');
```

### Webpack, Browserify, Vue and React (Native)

When targeting the browser, several code bundlers like Webpack and Browserify will pick up modules you might not want.

Here's a list of modules that AlaSQL may require in certain environments or for certain features:

- Node.js
  - fs
  - net
  - tls
  - request
  - path
- React Native
  - react-native
  - react-native-fs
  - react-native-fetch-blob
- Vertx
  - vertx
- Agonostic
  - XLSX/XLS support
    - cptable
    - jszip
    - xlsx
    - cpexcel
  - es6-promise

#### Webpack

There are several ways to handle AlaSQL with Webpack:

##### IgnorePlugin

Ideal when you want to control which modules you want to import.

```js
var IgnorePlugin =  require("webpack").IgnorePlugin;

module.exports = {
  ...
  // Will ignore the modules fs, path, xlsx, request, vertx, and react-native modules
  plugins:[new IgnorePlugin(/(^fs$|cptable|jszip|xlsx|^es6-promise$|^net$|^tls$|^forever-agent$|^tough-cookie$|cpexcel|^path$|^request$|react-native|^vertx$)/)]
};
```

##### module.noParse

As of AlaSQL 0.3.5, you can simply tell Webpack not to parse AlaSQL, which avoids all the dynamic `require` warnings and avoids using `eval`/clashing with CSP with script-loader.
[Read the Webpack docs about noParse](https://webpack.js.org/configuration/module/#modulenoparse)

```js
...
//Don't parse alasql
{module:noParse:[/alasql/]}
```

##### script-loader

If both of the solutions above fail to meet your requirements, you can load AlaSQL with [script-loader](https://github.com/webpack/script-loader).

```js
//Load alasql in the global scope with script-loader
import 'script!alasql';
```

This can cause issues if you have a CSP that doesn't allow `eval`.

#### Browserify

Read up on [excluding](https://github.com/substack/browserify-handbook#excluding), [ignoring](https://github.com/substack/browserify-handbook#ignoring), and [shimming](https://github.com/substack/browserify-handbook#shimming)

Example (using excluding)

```js
var browserify = require("browserify");
var b = browserify("./main.js").bundle();
//Will ignore the modules fs, path, xlsx
["fs","path","xlsx",  ... ].forEach(ignore => { b.ignore(ignore) });
```

#### Vue

For some frameworks (lige Vue) alasql cant access XLSX by it self. We recommend handling it by including AlaSQL the following way:

```import alasql from 'alasql';
import XLSX from 'xlsx';
alasql.utils.isBrowserify = false;
alasql.utils.global.XLSX = XLSX;
```

#### jQuery

Please remember to send the original event, and not the jQuery event, for elements. (Use `event.originalEvent` instead of `myEvent`)

### JSON-object

You can use JSON objects in your databases (do not forget use == and !== operators for deep comparison of objects):

```sql

alasql> SELECT VALUE {a:'1',b:'2'}

{a:1,b:2}

alasql> SELECT VALUE {a:'1',b:'2'} == {a:'1',b:'2'}

true

alasql> SELECT VALUE {a:'1',b:'2'}->b

2

alasql> SELECT VALUE {a:'1',b:(2*2)}->b

4

```

Try AlaSQL JSON objects in Console [sample](http://alasql.org/console?drop table if exists one;create table one;insert into one values {a:@[1,2,3],c:{e:23}}, {a:@[{b:@[1,2,3]}]};select \* from one)

## Experimental

_Useful stuff, but there might be dragons_

### Graphs

AlaSQL is a multi-paradigm database with support for graphs that can be searched or manipulated.

```js
// Who loves lovers of Alice?
var res = alasql('SEARCH / ANY(>> >> #Alice) name');
console.log(res); // ['Olga','Helen']
```

See more [in the wiki](https://github.com/alasql/alasql/wiki/GRAPH)

### localStorage and DOM-storage

You can use browser localStorage and [DOM-storage](https://github.com/node-browser-compat/dom-storage) as a data storage. Here is a sample:

```js
alasql('CREATE localStorage DATABASE IF NOT EXISTS Atlas');
alasql('ATTACH localStorage DATABASE Atlas AS MyAtlas');
alasql('CREATE TABLE IF NOT EXISTS MyAtlas.City (city string, population number)');
alasql('SELECT * INTO MyAtlas.City FROM ?', [
	[
		{city: 'Vienna', population: 1731000},
		{city: 'Budapest', population: 1728000},
	],
]);
var res = alasql('SELECT * FROM MyAtlas.City');
```

Try this sample in [jsFiddle](http://jsfiddle.net/agershun/x1gq3wf2/). Run this sample
two or three times, and AlaSQL store more and more data in localStorage. Here, "Atlas" is
the name of localStorage database, where "MyAtlas" is a memory AlaSQL database.

You can use localStorage in two modes: `SET AUTOCOMMIT ON` to immediate save data
to localStorage after each statement or `SET AUTOCOMMIT OFF`. In this case, you need
to use `COMMIT` statement to save all data from in-memory mirror to localStorage.

### Plugins

AlaSQL supports plugins. To install a plugin you need to use the `REQUIRE` statement. See more [in the wiki](https://github.com/alasql/alasql/wiki/Plugins)

### Alaserver - simple database server

Yes, you can even use AlaSQL as a very simple server for tests.

To run enter the command:

```bash
$ alaserver
```

then open <http://127.0.0.1:1337/?SELECT%20VALUE%20(2*2)> in your browser

Warning: Alaserver is not multi-threaded, not concurrent, and not secured.

## Tests

### Regression tests

AlaSQL currently has over 1200 regression tests, but they only cover [![Coverage](https://img.shields.io/codecov/c/github/alasql/alasql/develop.svg)](https://rawgit.com/alasql/alasql/develop/test/coverage/lcov-report/dist/alasql.fs.js.html)
of the codebase.

AlaSQL uses `mocha` for regression tests. Install `mocha` and run

```bash
$ npm test
```

or open [test/index.html](test/index.html) for in-browser tests (Please serve via localhost with, for example, `http-server`).

#### Tests with AlaSQL ASSERT from SQL

You can use AlaSQL's [ASSERT](wiki/Assert) operator to test the results of previous operation:

```sql
CREATE TABLE one (a INT);             ASSERT 1;
INSERT INTO one VALUES (1),(2),(3);   ASSERT 3;
SELECT * FROM one ORDER BY a DESC;    ASSERT [{a:3},{a:2},{a:1}];
```

#### SQLLOGICTEST

AlaSQL uses `SQLLOGICTEST` to test its compatibility with SQL-99. The tests include about 2 million queries and statements.

The testruns can be found in the [testlog](TESTLOG.md).

## Rebuilding the parser

To rebuild the parser, follow these steps:

- Make changes to alasqlparser.jison
- `npm install -g jison`
- `npm run jison`
- `npm test` to validate the changes made
- Commit changes to alasqlparser.jison and alasqlparser.js

## Contributing

See [Contributing](CONTRIBUTING.md) for details.

Thanks to all the people who already contributed!

<a href="https://github.com/alasql/alasql/graphs/contributors">
  <img src="https://contributors-img.web.app/image?repo=alasql/alasql" />
</a>

**Main contributors**

- [Andrey Gershun](https://github.com/alasql)
- [Mathias Rangel Wulff](https://twitter.com/rangelwulff)

AlaSQL is an [OPEN Open Source Project](https://openopensource.github.io/). This means that:

> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.

We appreciate any and all contributions we can get. If you feel like contributing, have a look at [CONTRIBUTING.md](https://github.com/alasql/alasql/blob/develop/CONTRIBUTING.md)

## Sponsors

We extend our heartfelt thanks to each and every sponsor for generously supporting the AlaSQL open-source project by providing infrastructure at no cost. Their contributions enhance the development experience, and we highly recommend exploring their offerings.

### Faster GitHub Actions with Blacksmith

[Blacksmith](https://www.blacksmith.sh/?source=alasql) significantly improves the speed of our GitHub Actions workflows by offering more powerful machines and enhanced caching mechanisms. Transitining was a one-line change and it has reduced our automated test times from 70-90 seconds to 15-17 seconds.

<a href="https://www.blacksmith.sh/?source=alasql">
    <img src="https://github.com/user-attachments/assets/a85a8a5f-65fd-48e1-aaad-b3f247248928" alt="Blacksmith Logo" width="300">
</a>

---

### Browser Testing on Physical Devices with BrowserStack

[BrowserStack](https://www.browserstack.com/?source=alasql) enables us to run automated tests in real browsers on physical devices to help us identify cross-browser issues early.

<a href="https://www.browserstack.com/?source=alasql">
    <img src="https://github.com/user-attachments/assets/9f74c25b-7dde-4a62-944e-8f23fc399ba9" alt="BrowserStack Logo" width="300">
</a>

---

### Development Practice Tracking with OpenSSF

The [Open Source Security Foundation (OpenSSF)](https://openssf.org) provides automated tools to evaluate and monitor the development practices in our repository, ensuring we maintain high standards of security and reliability.

<div style="background-color: #321e6b; padding: 10px;">
    <a href="https://openssf.org">
        <img src="https://github.com/user-attachments/assets/30a5e4ef-62b2-431d-905e-19ce5f9b6048" alt="OpenSSF Logo" width="300">
    </a>
</div>

## License

MIT - see [MIT licence information](LICENSE)

## Credits

Many thanks to:

- Zach Carter for [Jison parser-generator](https://github.com/zaach/jison)
- Andrew Kent for [JS SQL Parser](https://github.com/forward/sql-parser)
- Eli Grey for [FileSaver.js](https://github.com/eligrey/FileSaver.js)
- [SheetJS](https://sheetjs.com) for [JS XLSX Library](https://github.com/SheetJS/js-xlsx)

and other people for useful tools, which make our work much easier.

### Related projects that have inspired us

- [AlaX](http://github.com/alasql/alax) - Export to Excel with colors and formats
- [AlaMDX](http://github.com/alasql/alamdx) - JavaScript MDX OLAP library (work in progress)
- [Other similar projects](http://github.com/alasql/alasql/wiki/Similar-Projects.md) - list of databases on JavaScript

---

<a href="http://alasql.org"><img src="https://cloud.githubusercontent.com/assets/1063454/14003946/d6e5c076-f156-11e5-8238-e62d2a8d20dc.png" align="right" alt="AlaSQL logo"/></a>
© 2014-2025, Andrey Gershun (agershun@gmail.com) & Mathias Rangel Wulff (m@rawu.dk)

See [this article](https://console.substack.com/p/console-187) for a bit of information about the motivation and background.


================================================
FILE: RELEASES.md
================================================
# Releases Plan

## Target
The target for AlaSQLdevelopment is a small compact library with size less than 200kb with support of:
a) significant subset of SQL-92 to use the same SQL code on the client and server
b) complex queries on the JavaScript arrays (including search and JSON traversing) 
c) support some simple ETL operations (import-export from CSV and XLS formats)   
d) database backend support (IndexedDB in the first)

Plus some other features, like graphs and others in plug-ins.

## Alasql Development Prioritites
1. Bugs, Speed, Memory Leaks, Better Code, JsDoc, Errors handling, Library Size, Compatibility (Browsers, Mobiles, SQLs)
2. Documentation, alasql.org website, Social Media, Alasql promotion, Article, Coockbook, Tutorial
3. IF problem, UNION bug, merge algorithms, utilities, Prettify, Console, Alacon
4. Transactions
5. PIVOT, UNPIVOT, GROUP BY TOTAL, DETAIL, GROUP BY HIERARCHY
6. WebSQL and pass-thru databases, better support of with IndexedDB and NeDB, WebWorkers
7. SYNC, optimiztic blocking
8. Linq, NoSQL, and MongoDB functions
9. Streams, cursors,while, Console

## Next Releases:

### AlaSQL 0.3
There are some features in the short list for the June-July 2015:
e) extend transactions support
f) add simple triggers or INSERT OR REPLACE operator
g) improve database backend functionality (IndexedDB, localStorage, fileStorage) - especially for mobile applications (Cordova, Meteor).

The target of this phase is to pass SQLLOGIC test. 


### AlaSQL 0.4
h) split alasql.js into core and additional modules to reduce the size of the library
i) add OrientDB support to search over graphs
j) work with memory leaks

### AlaSQL 0.5
k) improve parser to reduce its size, make it faster (especally for INSERT operator), split grammar files by modules




================================================
FILE: SECURITY.md
================================================
Hi

Lovely to hear you found a problem. Lets solve it together. 

If you dont feel like writing an issue about it you are welcome to contact Mathias and/or Andrew

- [Mathias Wulff](mailto:hi@mwulff.com)
- [Andrey Gershun](mailto:agershun@gmail.com)



================================================
FILE: TESTLOG.md
================================================
# Testlog for AlaSQL

List of final results from [different test runs](https://github.com/alasql/alasql/tree/develop/test/!testlog/) to keep track on progres.  


## SQLlogic

The Sqllogictest was developed by [the SQLite team](https://www.sqlite.org/sqllogictest/doc/trunk/about.wiki) 
to verify that SQL database engine computes correct results by comparing the results to identical queries from other SQL database engines. The full test consists of roughly 6 million SQL statements.

### Node 
* `alasql@0.3.2`
* Total tested: 5,941,494
* Failed tests: 638,370
* Skipped tests: 53,316
* Final score: 88 % was OK

See full result [here](https://github.com/alasql/alasql/tree/develop/test/!testlog/SQLlogic.md)

### Chakra
It has not yet been possible to run the SQLlogic tests on the Chrakra engine. 


## Regression test
The [regression tests for AlaSQL](https://github.com/alasql/alasql/tree/develop/test/) consists of more than 1000 test casescovering [![Coverage]( https://img.shields.io/codecov/c/github/agershun/alasql/develop.svg)](https://rawgit.com/agershun/alasql/develop/test/coverage/lcov-report/dist/alasql.fs.js.html) of the functionality in the library. The regression test is ran everytime the library is compiled from `src/` to `dist/` and must always be 100% OK on Node before releaseing a new version. 

By executing `npm test` the regression test will run via Node. By executing `npm run test:browser` it will run in a browser. 




### Chrome 52
- `alasql@0.3.2-develop-1413`
- Failures: 47
- Passes 1080

See full result [here](https://github.com/alasql/alasql/tree/develop/test/!testlog/Chrome.md)

_It needs more investigations, but as Chrome uses the same V8 engine as Node the errors are likely caused by how some of the tests loads or stores test data. The amount of Chrome errors will be therefor (probably) also be represented in other browsers._ 

### Safari 9
- `alasql@0.3.2-develop-1413`
- Failures: 63
- Passes 1064

See full result [here](https://github.com/alasql/alasql/tree/develop/test/!testlog/Safari.md)


### Firefox 47
- `alasql@0.3.2-develop-1413`
- Failures: 58
- Passes 1069

See full result [here](https://github.com/alasql/alasql/tree/develop/test/!testlog/Firefox.md)

### Edge
- `alasql@0.2.3-develop-1206`
- Failures: 81
- Passes 1034

### Opera 38
- `alasql@0.3.2-develop-1413`
- Failures: 46
- Passes 1081


### Chakra v6.0.0-pre5
- `alasql@0.2.3-develop-1216`
-  1364 passing (2m)
-  66 pending
-  22 failing

See full result [here](https://github.com/alasql/alasql/tree/develop/test/!testlog/Chakra.md)


### Node
- `alasql@0.3.2-develop-1413`
- 1385 passing (2m)
-  83 pending
  


If 100% of the regression test is OK for [the lats commit](https://travis-ci.org/agershun/alasql/builds) this will be green: 

[![Build status](https://api.travis-ci.org/agershun/alasql.svg)](https://travis-ci.org/agershun/alasql?123)


================================================
FILE: bin/alaserver.js
================================================
#!/usr/bin/env node
//
// alaserver.js = Alasql Server
// Date: 25.11.2014
// (c) 2014, Andrey Gershun
//

var alasql = require('alasql');
var http = require('http');
var url = require('url');
var port = (process.argv[2] || 1337) | 0;
if (!port) {
	throw new Error('Wrong port number ' + process.argv[3]);
}

http
	.createServer(function (req, res) {
		var sql = decodeURI(url.parse(req.url).search).substr(1);
		var a = '';
		try {
			a = alasql(sql);
		} catch (err) {
			a = err.toString();
		}
		res.writeHead(200, {'Content-Type': 'application/json'});
		res.end(JSON.stringify(a));
	})
	.listen(port, '127.0.0.1');

console.log('Server running at http://127.0.0.1:' + port + '/');


================================================
FILE: bin/alasql-cli.js
================================================
#!/usr/bin/env node

//
// Command line interface for Alasql
// Version: 0.2.3
// Date: 28.07.2015
// (c) 2014-2022, Andrey Gershun & Mathias Wulff
//

let alasql = require('../dist/alasql.fs.js');
let path = require('path');
let fs = require('fs');
let yargs = require('yargs')
	.strict()
	.usage(
		'AlaSQL command-line utility (version ' +
			alasql.version +
			')\n\nUsage: $0 [options] [sql] [params]'
	)

	.example('$0 "sql-statement"', 'Run SQL statement and output result as JSON')
	.example('')
	.example("$0 'value of select 2+?' 40", 'Outputs 42')
	.example('')
	.example("$0 'select count(*) from txt()' < city.txt", 'Count lines in city.txt')
	.example('')
	.example(
		'$0 \'select * into xlsx("city.xlsx") from txt("city.txt")\'',
		'Convert from txt to xlsx'
	)
	.example('')
	.example('$0 --file file.sql France 1960', 'Run SQL from file with 2 parameters')

	.version('v', 'Echo AlaSQL version', alasql.version)
	.alias('v', 'version')

	.boolean('m')
	.describe('m', 'Minify json output')
	.alias('m', 'minify')

	.describe('f', 'Load SQL from file')
	.alias('f', 'file')
	.nargs('f', 1)
	.normalize('f')

	.boolean('ast')
	.describe('ast', 'Print AST instead of result')
	.normalize('ast')

	/*.boolean('comp')
	.describe('comp', 'Print compiled function instead of result')
	.normalize('comp')*/

	.help('h')
	.alias('h', 'help')

	.epilog('\nMore information about the library: www.alasql.org');

let argv = yargs.argv;

// Regex patterns for detecting functions
const re = {
	txt: /txt\s*\(\s*\)/i,
};

// Helper function to check if SQL contains txt() and stdin is piped
function isPipeData(sql) {
	return sql && !process.stdin.isTTY && re.txt.test(sql);
}

// Helper function to setup stdin handling
function pipeIsSQL() {
	const stdin = process.openStdin();
	let pipedData = '';
	stdin.on('data', function (chunk) {
		pipedData += chunk;
	});
	stdin.on('end', function () {
		execute(pipedData, argv._);
	});
	return stdin;
}

// Helper function to load and validate SQL file
function loadSqlFile(filePath) {
	if (!fs.existsSync(filePath)) {
		console.error('Error: file not found');
		process.exit(1);
	}
	if (isDirectory(filePath)) {
		console.error('Error: file expected but directory found');
		process.exit(1);
	}
	return fs.readFileSync(filePath, 'utf8').toString();
}

// Main execution logic
function main() {
	let sql = '';
	let pipeIsData = false;

	if (argv.f) {
		sql = loadSqlFile(argv.f);
		pipeIsData = isPipeData(sql);
	} else {
		sql = argv._.shift() || '';
		pipeIsData = isPipeData(sql);
	}

	// Setup stdin handling only if not using txt() pipe
	if (!pipeIsData) {
		pipeIsSQL();
	}

	// Execute immediately if we have SQL or are using txt() pipe
	if (sql || pipeIsData) {
		execute(sql, argv._);
	}
}

if (argv.v) {
	console.log(alasql.version);
	process.exit(0);
}

main();

/**
 * Execute SQL query
 *
 * @sql {String} SQL query
 * @param {String} Parameters
 * @returns {null} Result will be printet to console.log
 */
function execute(sql, params) {
	if ('' === sql) sql = params.shift() || '';

	if (0 === sql.trim().length) {
		console.error('\nNo SQL to process\n');
		yargs.showHelp();
		process.exit(1);
	}

	for (var i = 1; i < params.length; i++) {
		var a = params[i];
		if (a[0] !== '"' && a[0] !== "'") {
			if (+a == a) {
				// jshint ignore:line
				params[i] = +a;
			}
		}
	}

	if (argv.ast) {
		try {
			console.log(formatOutput(alasql.parse(sql, params)));
			process.exit(0);
		} catch (e) {
			console.error(e);
			process.exit(1);
		}
	}

	/*if (argv.comp) {
		try {
			console.log(alasql.compile(sql, params));
			process.exit(0);
		} catch (e) {
			console.error(e);
			process.exit(1);
		}
	}*/

	alasql
		.promise(sql, params)
		.then(function (res) {
			if (!alasql.options.stdout) {
				console.log(formatOutput(res));
			}
			process.exit(0);
		})
		.catch(function (err) {
			let errorJsonObj = JSON.parse(JSON.stringify(err, Object.getOwnPropertyNames(err)));
			console.error(
				formatOutput({
					error: errorJsonObj,
				})
			);
			process.exit(1);
		});
}

/**
 * Is this padh a Directory
 *
 * @param {String} filePath
 * @returns {Boolean}
 */
function isDirectory(filePath) {
	var isDir = false;
	try {
		var absolutePath = path.resolve(filePath);
		isDir = fs.lstatSync(absolutePath).isDirectory();
	} catch (e) {
		isDir = e.code === 'ENOENT';
	}
	return isDir;
}

/**
 * Format output
 *
 * @param {Object} Object to be formatted according to -p flag
 * @returns {JSON string}
 */
function formatOutput(obj) {
	if (argv.m) {
		return JSON.stringify(obj);
	}
	return JSON.stringify(obj, null, 2);
}


================================================
FILE: build.sh
================================================
rm -fr dist/
mkdir dist/

if ! command -v "rexreplace" > /dev/null 2>&1; then
	echo "\nSpeed up the process by having rexreplace installed globally"
	echo "> npm install -g rexreplace"
fi

if ! command -v "esbuild" > /dev/null 2>&1; then
	echo "\nSpeed up the process by having esbuild installed globally"
	echo "> npm install -g esbuild"
fi


# Run comands via x to avoid npx overhead if the command is installed globally (3.27x slower)
x() {
	local cmd="$1"
	shift
	if command -v "$cmd" > /dev/null 2>&1; then
		"$cmd" "$@"  # Run the command with all remaining arguments
	else
		npx "$cmd" "$@"  # Use npx to run the command with all remaining arguments
	fi
}

branch=$(git rev-parse --abbrev-ref HEAD |  rexreplace '[^0-9a-z-]' '.' |  rexreplace '^[^0-9a-z]+|[^0-9a-z]+$' '')
commit=$(git rev-parse --short HEAD)


echo '\nPrepare types'
cp 'types/alasql.d.ts' dist/


echo '\nPrepare echo plugin'
cp 'src/echo/alasql-echo.js' dist/


echo '\nPrepare prolog'
cp 'src/prolog/alasql-prolog.js' dist/


echo '\nBuild alasql.js files'
outfile="dist/alasql.js"
outfile_min="dist/alasql.min.js"
outfile_fs="dist/alasql.fs.js"

echo '# Concat all parts'
cat \
	src/05copyright.js		\
	src/10start.js			\
	src/alasqlparser.js		\
	src/12pretty.js			\
	src/15utility.js		\
	src/16comments.js		\
	src/17alasql.js			\
	src/18promise.js		\
	src/20database.js		\
	src/21transaction.js	\
	src/23table.js			\
	src/24view.js			\
	src/25queryclass.js		\
	src/28yy.js				\
	src/30statements.js		\
	src/35search.js			\
	src/38query.js			\
	src/39dojoin.js			\
	src/40select.js			\
	src/41exists.js			\
	src/420from.js			\
	src/421join.js			\
	src/422where.js			\
	src/423groupby.js		\
	src/424select.js		\
	src/425having.js		\
	src/426orderby.js		\
	src/427pivot.js			\
	src/43rollup.js			\
	src/44defcols.js		\
	src/45union.js			\
	src/46apply.js			\
	src/47over.js			\
	src/50expression.js		\
	src/52linq.js			\
	src/55functions.js		\
	src/57case.js			\
	src/58json.js			\
	src/59convert.js		\
	src/60createtable.js	\
	src/61date.js			\
	src/62droptable.js		\
	src/63createvertex.js	\
	src/64altertable.js		\
	src/65createindex.js	\
	src/66dropindex.js		\
	src/67withselect.js		\
	src/68if.js				\
	src/69while.js			\
	src/70insert.js			\
	src/71trigger.js		\
	src/72delete.js			\
	src/74update.js			\
	src/75merge.js			\
	src/76usedatabase.js	\
	src/77declare.js		\
	src/78show.js			\
	src/79set.js			\
	src/80console.js		\
	src/81commit.js			\
	src/821tsql.js			\
	src/822mysql.js			\
	src/823postgres.js		\
	src/824oracle.js		\
	src/825sqlite.js		\
	src/830into.js			\
	src/831xls.js			\
	src/832xlsxml.js		\
	src/833xlsx.js			\
	src/84from.js			\
	src/843xml.js			\
	src/844gexf.js			\
	src/86print.js			\
	src/87source.js			\
	src/88require.js		\
	src/89assert.js			\
	src/91indexeddb.js		\
	src/92localstorage.js	\
	src/93sqljs.js			\
	src/94filestorage.js	\
	src/97saveas.js			\
	src/99worker.js			\
	src/FileSaver.js		\
	src/98finish.js			\
> $outfile_fs

echo '# Remove multiline comments starting with "/*/*"'
x rexreplace '/\*/\*[\S\s]+?\*/' '' -q $outfile_fs

echo '# Remove single line comments where the // part is first thing'
x rexreplace '^//[ \t]{2,}.*' '' -q $outfile_fs

echo '# Remove single line comments "console.log(" is part of the line'
x rexreplace '//.*?console\.log\(.*' '' -q $outfile_fs

echo '# Collaps multilinebreak'
x rexreplace '\n[\s]+\n' '\n\n' -q $outfile_fs

echo '# Inject package version'
x rexreplace 'PACKAGE_VERSION' 'r("package").version' -j -q $outfile_fs

echo '# Inject build version'
x rexreplace 'BUILD_VERSION' "['$branch','$commit'].filter(Boolean).join('-')" -j -q $outfile_fs

echo '# Prepare browser version'
cp $outfile_fs $outfile

echo '# Remove things not for browser build'
x rexreplace '//*not-for-browser/*' '/*not-for-browser/*'	-L -q $outfile

echo '# Reveal things only for browser build'
x rexreplace '/*only-for-browser/*' '//*only-for-browser/*'	-L -q $outfile

echo '# Support "use strict in jison output" ' # https://github.com/zaach/jison/pull/373
x rexreplace 'function locateNearestErrorRecoveryRule(state) {' 'var locateNearestErrorRecoveryRule = function (state) {'	-L -q $outfile

x esbuild --minify --outfile="$outfile_min" "$outfile" --allow-overwrite

#first_line=$(head -n 1 $outfile)
#x rexreplace '^' "c = 'first_line'; c.match(/^\/\//) ? c : ''" -j -M $outfile_min






echo '\nBuild precompile files'
mkdir -p dist/precompile

echo '# Copy precompile module'
x esbuild --outfile="dist/precompile/index.js" "src/precompile/index.js" --format=cjs 


 

echo '\nBuild worker files'
outfile="dist/alasql-worker.js"
outfile_min="dist/alasql-worker.js"

echo '# Concat all parts'
cat \
	src/05copyright.js		\
	src/99worker-start.js	\
	src/99worker.js			\
	src/99worker-finish.js	\
> $outfile

echo '# Inject package version'
x rexreplace 'PACKAGE_VERSION' 'r("package").version' -j -q $outfile

echo '# Inject build version'
x rexreplace 'BUILD_VERSION' "['$branch','$commit'].filter(Boolean).join('-')" -j -q $outfile

echo '# Prepare min version'
x esbuild --minify --outfile="$outfile_min" "$outfile" --allow-overwrite

#first_line=$(head -n 1 $outfile)
#x rexreplace '^' "c = 'first_line'; c.match(/^\/\//) ? c : ''" -j -M $outfile_min






================================================
FILE: docs/PRECOMPILE.md
================================================

### Transform SQL to JavaScript code

If you want to fiddle with speed you can pre-generate the JS code that will be running your query. 

The returned function has the signature `function(params, cb)` and is designed to be called with `alasql` as context.

```js
import alasql from 'alasql';
import {compileToJS} from 'alasql/precompile';

const jsCode = compileToJS('SELECT * FROM ? WHERE pop > 1000000', 'my_db');

const selectPop = new Function('return ' + jsCode)().bind(alasql);

// Now you can call it like a regular alasql function, but without the SQL
let data = [{city: 'Copenhagen', pop: 1300000}, {city: 'Aarhus', pop: 300000}];
let res = selectPop([data]);
// res will be [{city: 'Copenhagen', pop: 1300000}]
```

This example is not useful in it self, as it is all done during exeuction time (you could just as well have used alasql.compile() directly). However, if you precompile the function at build time, it can be a significant performance boost as the execution don't have to parse the SQL. There is an example of how to do this with Bun in [examples/precompileJS](https://github.com/AlaSQL/alasql/tree/develop/examples/precompileJS)


---------


# AlaSQL Precompile Module

This module provides SQL compilation functionality that allows you to pre-compile SQL queries into JavaScript code, skipping SQL parsing on execution.

The functionality is experimental - so proceed with caution and expect changes.

## Installation

```javascript
import { compileToJS } from 'alasql/precompile';
```

## Functions

### `compileToJS(sql, databaseid?)` - Precompile

Compiles a SQL statement to JavaScript source code that expects an AlaSQL engine as `this`. This is useful for performance optimization as it eliminates SQL parsing overhead at runtime.

**Parameters:**
- `sql` (string): SQL statement to compile
- `databaseid` (string, optional): Database identifier

**Returns:** Generated JavaScript source code string

## Usage Example

```javascript
import { compileToJS } from 'alasql/precompile';

const sql = 'SELECT name, age FROM users WHERE age > ?';
const jsCode = compileToJS(sql);

// Create a function from the compiled code
const queryFn = new Function('return ' + jsCode)().bind(alasql);

// Execute the function (requires AlaSQL)
const result = queryFn([users, 18]);
```

## Build-time Compilation

You can use this function with build tools like Bun, Vite, or Webpack to compile SQL queries at build time:

```javascript
// Using Bun macro for precompile
import { compileToJS } from './my-queries.js' with { type: 'macro' };

const queryFn = new Function('return ' + compileToJS('SELECT * FROM users'))().bind(alasql);
```

## Benefits

- **Performance**: Eliminate SQL parsing overhead at runtime
- **Flexibility**: Still has access to full AlaSQL functionality
- **Debugging**: Can still use AlaSQL debugging tools
- **Works with database tables**: Supports both parameterized queries and database tables


================================================
FILE: examples/angular/import-export-excel/import-export-to-excel.factory.js
================================================
(function () {
	'use strict';

	angular.module('jfy').factory('ImportExportToExcel', ImportExportToExcel);

	function ImportExportToExcel(alasql, $log, $rootScope) {
		return {
			importFromExcel: function (event) {
				if (event.target.files.length == 0) {
					return false;
				}
				alasql('SELECT * FROM FILE(?,{headers:true})', [event], function (data) {
					$rootScope.$broadcast('import-excel-data', data);
				});
			},
			exportToExcel: function (fileName, targetData) {
				if (!angular.isArray(targetData)) {
					$log.error('Can not export error type data to excel.');
					return;
				}
				alasql('SELECT * INTO XLSX("' + fileName + '.xlsx",{headers:true}) FROM ?', [targetData]);
			},
		};
	}
})();


================================================
FILE: examples/angular/import-export-excel/import-from-excel.directive.js
================================================
(function () {
	'use strict';

	angular.module('jfy').directive('importFromExcel', importFromExcel);

	function importFromExcel(ImportExportToExcel) {
		var directive = {
			restrict: 'A',
			link: linkFunc,
		};
		return directive;

		function linkFunc(scope, element) {
			element.change(function (event) {
				ImportExportToExcel.importFromExcel(event.originalEvent);
			});
		}
	}
})();


================================================
FILE: examples/angular/import-export-excel/test.controller.js
================================================
(function () {
	'use strict';

	angular.module('jfy').controller('TestController', TestController);

	/** @ngInject */
	function TestController($scope, ImportExportToExcel) {
		var vm = this;

		vm.tableData = [
			{a: 1, b: 10},
			{a: 2, b: 20},
		];
		vm.export = function () {
			ImportExportToExcel.exportToExcel('test', vm.tableData);
		};
		$scope.$on('import-excel-data', function (e, v) {
			console.log('excel-data:', v);
		});
	}
})();


================================================
FILE: examples/angular/import-export-excel/test.html
================================================
<div class="container_body store-record">
    <button class="btn btn-primary" ng-click="tc.export()">导出</button>
    <p>Select CSV file to read:</p>
    <input class="btn btn-primary" type="file" import-from-excel=""/>
</div>


================================================
FILE: examples/country/city.js
================================================
var alasql = require('../../alasql');

alasql.from.csv = function (filename, opts) {
	var fs = require('fs');
	//	console.log(__dirname+'/'+filename);
	var txt = fs.readFileSync(filename).toString();
	var aaa = txt.split(/\r?\n/);
	var h = aaa.shift().split(',');
	//	console.log(h);
	return {rows: aaa, headers: h};
};

alasql(
	"select country_name into #city from csv('country.csv',@{headers:true}) where continent_code = 'AF'",
	[],
	function (res) {
		console.log(res[0]);
		console.log(alasql.temp.city);
	}
);


================================================
FILE: examples/nodesample.js
================================================
//
// AlaSQL node.js sample
//

var alasql = require('alasql');

var db = new alasql.Database();

db.exec('CREATE TABLE test (one INT, two INT)');
db.tables.test.data = [
	// You can mix SQL and JavaScript
	{one: 3, two: 4},
	{one: 5, two: 6},
];

var res = db.exec('SELECT * FROM test ORDER BY two DESC');

console.log(res);


================================================
FILE: examples/other/test.js
================================================
var alasql = require('../../alasql');

var groups = [
	{id: 4, name: 'abcd', id_group: '1'},
	{id: 5, name: 'efgh', id_group: '1'},
	{id: 6, name: 'ijkl', id_group: '1'},
	{id: 4, name: 'abcd', id_group: '2'},
	{id: 7, name: 'mnop', id_group: '2'},
];

var res = alasql(
	'select id_group, count(id) as cnt from ? where id in (4,7)\
group by id_group having cnt = 2',
	[groups]
);

console.log(res);

var res = alasql(
	'select id_group, count(id) as cnt from ? where id in (4,7)\
group by id_group having count(id) = 2',
	[groups]
);

console.log(res);

//document.getElementById('result').textContent = JSON.stringify(res);


================================================
FILE: examples/param.js
================================================
var alasql = require('alasql');

var data = [{a: 0}, {a: 1}, {a: 2}, {a: 3}, {a: 4}];

var res = alasql('SELECT * FROM ? WHERE a >= ?', [data, 2]);

console.log(res);


================================================
FILE: examples/precompile/build/myCode.bundle.js
================================================
import {createRequire} from 'node:module';
var __create = Object.create;
var __getProtoOf = Object.getPrototypeOf;
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __toESM = (mod, isNodeMode, target) => {
	target = mod != null ? __create(__getProtoOf(mod)) : {};
	const to =
		isNodeMode || !mod || !mod.__esModule
			? __defProp(target, 'default', {value: mod, enumerable: true})
			: target;
	for (let key of __getOwnPropNames(mod))
		if (!__hasOwnProp.call(to, key))
			__defProp(to, key, {
				get: () => mod[key],
				enumerable: true,
			});
	return to;
};
var __commonJS = (cb, mod) => () => (mod || cb((mod = {exports: {}}).exports, mod), mod.exports);
var __require = /* @__PURE__ */ createRequire(import.meta.url);

// ../../node_modules/webidl-conversions/lib/index.js
var require_lib = __commonJS((exports, module) => {
	var conversions = {};
	module.exports = conversions;
	function sign(x) {
		return x < 0 ? -1 : 1;
	}
	function evenRound(x) {
		if (x % 1 === 0.5 && (x & 1) === 0) {
			return Math.floor(x);
		} else {
			return Math.round(x);
		}
	}
	function createNumberConversion(bitLength, typeOpts) {
		if (!typeOpts.unsigned) {
			--bitLength;
		}
		const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
		const upperBound = Math.pow(2, bitLength) - 1;
		const moduloVal = typeOpts.moduloBitLength
			? Math.pow(2, typeOpts.moduloBitLength)
			: Math.pow(2, bitLength);
		const moduloBound = typeOpts.moduloBitLength
			? Math.pow(2, typeOpts.moduloBitLength - 1)
			: Math.pow(2, bitLength - 1);
		return function (V, opts) {
			if (!opts) opts = {};
			let x = +V;
			if (opts.enforceRange) {
				if (!Number.isFinite(x)) {
					throw new TypeError('Argument is not a finite number');
				}
				x = sign(x) * Math.floor(Math.abs(x));
				if (x < lowerBound || x > upperBound) {
					throw new TypeError('Argument is not in byte range');
				}
				return x;
			}
			if (!isNaN(x) && opts.clamp) {
				x = evenRound(x);
				if (x < lowerBound) x = lowerBound;
				if (x > upperBound) x = upperBound;
				return x;
			}
			if (!Number.isFinite(x) || x === 0) {
				return 0;
			}
			x = sign(x) * Math.floor(Math.abs(x));
			x = x % moduloVal;
			if (!typeOpts.unsigned && x >= moduloBound) {
				return x - moduloVal;
			} else if (typeOpts.unsigned) {
				if (x < 0) {
					x += moduloVal;
				} else if (x === -0) {
					return 0;
				}
			}
			return x;
		};
	}
	conversions['void'] = function () {
		return;
	};
	conversions['boolean'] = function (val) {
		return !!val;
	};
	conversions['byte'] = createNumberConversion(8, {unsigned: false});
	conversions['octet'] = createNumberConversion(8, {unsigned: true});
	conversions['short'] = createNumberConversion(16, {unsigned: false});
	conversions['unsigned short'] = createNumberConversion(16, {unsigned: true});
	conversions['long'] = createNumberConversion(32, {unsigned: false});
	conversions['unsigned long'] = createNumberConversion(32, {unsigned: true});
	conversions['long long'] = createNumberConversion(32, {unsigned: false, moduloBitLength: 64});
	conversions['unsigned long long'] = createNumberConversion(32, {
		unsigned: true,
		moduloBitLength: 64,
	});
	conversions['double'] = function (V) {
		const x = +V;
		if (!Number.isFinite(x)) {
			throw new TypeError('Argument is not a finite floating-point value');
		}
		return x;
	};
	conversions['unrestricted double'] = function (V) {
		const x = +V;
		if (isNaN(x)) {
			throw new TypeError('Argument is NaN');
		}
		return x;
	};
	conversions['float'] = conversions['double'];
	conversions['unrestricted float'] = conversions['unrestricted double'];
	conversions['DOMString'] = function (V, opts) {
		if (!opts) opts = {};
		if (opts.treatNullAsEmptyString && V === null) {
			return '';
		}
		return String(V);
	};
	conversions['ByteString'] = function (V, opts) {
		const x = String(V);
		let c = undefined;
		for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
			if (c > 255) {
				throw new TypeError('Argument is not a valid bytestring');
			}
		}
		return x;
	};
	conversions['USVString'] = function (V) {
		const S = String(V);
		const n = S.length;
		const U = [];
		for (let i = 0; i < n; ++i) {
			const c = S.charCodeAt(i);
			if (c < 55296 || c > 57343) {
				U.push(String.fromCodePoint(c));
			} else if (56320 <= c && c <= 57343) {
				U.push(String.fromCodePoint(65533));
			} else {
				if (i === n - 1) {
					U.push(String.fromCodePoint(65533));
				} else {
					const d = S.charCodeAt(i + 1);
					if (56320 <= d && d <= 57343) {
						const a = c & 1023;
						const b = d & 1023;
						U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
						++i;
					} else {
						U.push(String.fromCodePoint(65533));
					}
				}
			}
		}
		return U.join('');
	};
	conversions['Date'] = function (V, opts) {
		if (!(V instanceof Date)) {
			throw new TypeError('Argument is not a Date object');
		}
		if (isNaN(V)) {
			return;
		}
		return V;
	};
	conversions['RegExp'] = function (V, opts) {
		if (!(V instanceof RegExp)) {
			V = new RegExp(V);
		}
		return V;
	};
});

// ../../node_modules/whatwg-url/lib/utils.js
var require_utils = __commonJS((exports, module) => {
	exports.mixin = function mixin(target, source) {
		const keys = Object.getOwnPropertyNames(source);
		for (let i = 0; i < keys.length; ++i) {
			Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
		}
	};
	exports.wrapperSymbol = Symbol('wrapper');
	exports.implSymbol = Symbol('impl');
	exports.wrapperForImpl = function (impl) {
		return impl[exports.wrapperSymbol];
	};
	exports.implForWrapper = function (wrapper) {
		return wrapper[exports.implSymbol];
	};
});

// ../../node_modules/tr46/lib/mappingTable.json
var require_mappingTable = __commonJS((exports, module) => {
	module.exports = [
		[[0, 44], 'disallowed_STD3_valid'],
		[[45, 46], 'valid'],
		[[47, 47], 'disallowed_STD3_valid'],
		[[48, 57], 'valid'],
		[[58, 64], 'disallowed_STD3_valid'],
		[[65, 65], 'mapped', [97]],
		[[66, 66], 'mapped', [98]],
		[[67, 67], 'mapped', [99]],
		[[68, 68], 'mapped', [100]],
		[[69, 69], 'mapped', [101]],
		[[70, 70], 'mapped', [102]],
		[[71, 71], 'mapped', [103]],
		[[72, 72], 'mapped', [104]],
		[[73, 73], 'mapped', [105]],
		[[74, 74], 'mapped', [106]],
		[[75, 75], 'mapped', [107]],
		[[76, 76], 'mapped', [108]],
		[[77, 77], 'mapped', [109]],
		[[78, 78], 'mapped', [110]],
		[[79, 79], 'mapped', [111]],
		[[80, 80], 'mapped', [112]],
		[[81, 81], 'mapped', [113]],
		[[82, 82], 'mapped', [114]],
		[[83, 83], 'mapped', [115]],
		[[84, 84], 'mapped', [116]],
		[[85, 85], 'mapped', [117]],
		[[86, 86], 'mapped', [118]],
		[[87, 87], 'mapped', [119]],
		[[88, 88], 'mapped', [120]],
		[[89, 89], 'mapped', [121]],
		[[90, 90], 'mapped', [122]],
		[[91, 96], 'disallowed_STD3_valid'],
		[[97, 122], 'valid'],
		[[123, 127], 'disallowed_STD3_valid'],
		[[128, 159], 'disallowed'],
		[[160, 160], 'disallowed_STD3_mapped', [32]],
		[[161, 167], 'valid', [], 'NV8'],
		[[168, 168], 'disallowed_STD3_mapped', [32, 776]],
		[[169, 169], 'valid', [], 'NV8'],
		[[170, 170], 'mapped', [97]],
		[[171, 172], 'valid', [], 'NV8'],
		[[173, 173], 'ignored'],
		[[174, 174], 'valid', [], 'NV8'],
		[[175, 175], 'disallowed_STD3_mapped', [32, 772]],
		[[176, 177], 'valid', [], 'NV8'],
		[[178, 178], 'mapped', [50]],
		[[179, 179], 'mapped', [51]],
		[[180, 180], 'disallowed_STD3_mapped', [32, 769]],
		[[181, 181], 'mapped', [956]],
		[[182, 182], 'valid', [], 'NV8'],
		[[183, 183], 'valid'],
		[[184, 184], 'disallowed_STD3_mapped', [32, 807]],
		[[185, 185], 'mapped', [49]],
		[[186, 186], 'mapped', [111]],
		[[187, 187], 'valid', [], 'NV8'],
		[[188, 188], 'mapped', [49, 8260, 52]],
		[[189, 189], 'mapped', [49, 8260, 50]],
		[[190, 190], 'mapped', [51, 8260, 52]],
		[[191, 191], 'valid', [], 'NV8'],
		[[192, 192], 'mapped', [224]],
		[[193, 193], 'mapped', [225]],
		[[194, 194], 'mapped', [226]],
		[[195, 195], 'mapped', [227]],
		[[196, 196], 'mapped', [228]],
		[[197, 197], 'mapped', [229]],
		[[198, 198], 'mapped', [230]],
		[[199, 199], 'mapped', [231]],
		[[200, 200], 'mapped', [232]],
		[[201, 201], 'mapped', [233]],
		[[202, 202], 'mapped', [234]],
		[[203, 203], 'mapped', [235]],
		[[204, 204], 'mapped', [236]],
		[[205, 205], 'mapped', [237]],
		[[206, 206], 'mapped', [238]],
		[[207, 207], 'mapped', [239]],
		[[208, 208], 'mapped', [240]],
		[[209, 209], 'mapped', [241]],
		[[210, 210], 'mapped', [242]],
		[[211, 211], 'mapped', [243]],
		[[212, 212], 'mapped', [244]],
		[[213, 213], 'mapped', [245]],
		[[214, 214], 'mapped', [246]],
		[[215, 215], 'valid', [], 'NV8'],
		[[216, 216], 'mapped', [248]],
		[[217, 217], 'mapped', [249]],
		[[218, 218], 'mapped', [250]],
		[[219, 219], 'mapped', [251]],
		[[220, 220], 'mapped', [252]],
		[[221, 221], 'mapped', [253]],
		[[222, 222], 'mapped', [254]],
		[[223, 223], 'deviation', [115, 115]],
		[[224, 246], 'valid'],
		[[247, 247], 'valid', [], 'NV8'],
		[[248, 255], 'valid'],
		[[256, 256], 'mapped', [257]],
		[[257, 257], 'valid'],
		[[258, 258], 'mapped', [259]],
		[[259, 259], 'valid'],
		[[260, 260], 'mapped', [261]],
		[[261, 261], 'valid'],
		[[262, 262], 'mapped', [263]],
		[[263, 263], 'valid'],
		[[264, 264], 'mapped', [265]],
		[[265, 265], 'valid'],
		[[266, 266], 'mapped', [267]],
		[[267, 267], 'valid'],
		[[268, 268], 'mapped', [269]],
		[[269, 269], 'valid'],
		[[270, 270], 'mapped', [271]],
		[[271, 271], 'valid'],
		[[272, 272], 'mapped', [273]],
		[[273, 273], 'valid'],
		[[274, 274], 'mapped', [275]],
		[[275, 275], 'valid'],
		[[276, 276], 'mapped', [277]],
		[[277, 277], 'valid'],
		[[278, 278], 'mapped', [279]],
		[[279, 279], 'valid'],
		[[280, 280], 'mapped', [281]],
		[[281, 281], 'valid'],
		[[282, 282], 'mapped', [283]],
		[[283, 283], 'valid'],
		[[284, 284], 'mapped', [285]],
		[[285, 285], 'valid'],
		[[286, 286], 'mapped', [287]],
		[[287, 287], 'valid'],
		[[288, 288], 'mapped', [289]],
		[[289, 289], 'valid'],
		[[290, 290], 'mapped', [291]],
		[[291, 291], 'valid'],
		[[292, 292], 'mapped', [293]],
		[[293, 293], 'valid'],
		[[294, 294], 'mapped', [295]],
		[[295, 295], 'valid'],
		[[296, 296], 'mapped', [297]],
		[[297, 297], 'valid'],
		[[298, 298], 'mapped', [299]],
		[[299, 299], 'valid'],
		[[300, 300], 'mapped', [301]],
		[[301, 301], 'valid'],
		[[302, 302], 'mapped', [303]],
		[[303, 303], 'valid'],
		[[304, 304], 'mapped', [105, 775]],
		[[305, 305], 'valid'],
		[[306, 307], 'mapped', [105, 106]],
		[[308, 308], 'mapped', [309]],
		[[309, 309], 'valid'],
		[[310, 310], 'mapped', [311]],
		[[311, 312], 'valid'],
		[[313, 313], 'mapped', [314]],
		[[314, 314], 'valid'],
		[[315, 315], 'mapped', [316]],
		[[316, 316], 'valid'],
		[[317, 317], 'mapped', [318]],
		[[318, 318], 'valid'],
		[[319, 320], 'mapped', [108, 183]],
		[[321, 321], 'mapped', [322]],
		[[322, 322], 'valid'],
		[[323, 323], 'mapped', [324]],
		[[324, 324], 'valid'],
		[[325, 325], 'mapped', [326]],
		[[326, 326], 'valid'],
		[[327, 327], 'mapped', [328]],
		[[328, 328], 'valid'],
		[[329, 329], 'mapped', [700, 110]],
		[[330, 330], 'mapped', [331]],
		[[331, 331], 'valid'],
		[[332, 332], 'mapped', [333]],
		[[333, 333], 'valid'],
		[[334, 334], 'mapped', [335]],
		[[335, 335], 'valid'],
		[[336, 336], 'mapped', [337]],
		[[337, 337], 'valid'],
		[[338, 338], 'mapped', [339]],
		[[339, 339], 'valid'],
		[[340, 340], 'mapped', [341]],
		[[341, 341], 'valid'],
		[[342, 342], 'mapped', [343]],
		[[343, 343], 'valid'],
		[[344, 344], 'mapped', [345]],
		[[345, 345], 'valid'],
		[[346, 346], 'mapped', [347]],
		[[347, 347], 'valid'],
		[[348, 348], 'mapped', [349]],
		[[349, 349], 'valid'],
		[[350, 350], 'mapped', [351]],
		[[351, 351], 'valid'],
		[[352, 352], 'mapped', [353]],
		[[353, 353], 'valid'],
		[[354, 354], 'mapped', [355]],
		[[355, 355], 'valid'],
		[[356, 356], 'mapped', [357]],
		[[357, 357], 'valid'],
		[[358, 358], 'mapped', [359]],
		[[359, 359], 'valid'],
		[[360, 360], 'mapped', [361]],
		[[361, 361], 'valid'],
		[[362, 362], 'mapped', [363]],
		[[363, 363], 'valid'],
		[[364, 364], 'mapped', [365]],
		[[365, 365], 'valid'],
		[[366, 366], 'mapped', [367]],
		[[367, 367], 'valid'],
		[[368, 368], 'mapped', [369]],
		[[369, 369], 'valid'],
		[[370, 370], 'mapped', [371]],
		[[371, 371], 'valid'],
		[[372, 372], 'mapped', [373]],
		[[373, 373], 'valid'],
		[[374, 374], 'mapped', [375]],
		[[375, 375], 'valid'],
		[[376, 376], 'mapped', [255]],
		[[377, 377], 'mapped', [378]],
		[[378, 378], 'valid'],
		[[379, 379], 'mapped', [380]],
		[[380, 380], 'valid'],
		[[381, 381], 'mapped', [382]],
		[[382, 382], 'valid'],
		[[383, 383], 'mapped', [115]],
		[[384, 384], 'valid'],
		[[385, 385], 'mapped', [595]],
		[[386, 386], 'mapped', [387]],
		[[387, 387], 'valid'],
		[[388, 388], 'mapped', [389]],
		[[389, 389], 'valid'],
		[[390, 390], 'mapped', [596]],
		[[391, 391], 'mapped', [392]],
		[[392, 392], 'valid'],
		[[393, 393], 'mapped', [598]],
		[[394, 394], 'mapped', [599]],
		[[395, 395], 'mapped', [396]],
		[[396, 397], 'valid'],
		[[398, 398], 'mapped', [477]],
		[[399, 399], 'mapped', [601]],
		[[400, 400], 'mapped', [603]],
		[[401, 401], 'mapped', [402]],
		[[402, 402], 'valid'],
		[[403, 403], 'mapped', [608]],
		[[404, 404], 'mapped', [611]],
		[[405, 405], 'valid'],
		[[406, 406], 'mapped', [617]],
		[[407, 407], 'mapped', [616]],
		[[408, 408], 'mapped', [409]],
		[[409, 411], 'valid'],
		[[412, 412], 'mapped', [623]],
		[[413, 413], 'mapped', [626]],
		[[414, 414], 'valid'],
		[[415, 415], 'mapped', [629]],
		[[416, 416], 'mapped', [417]],
		[[417, 417], 'valid'],
		[[418, 418], 'mapped', [419]],
		[[419, 419], 'valid'],
		[[420, 420], 'mapped', [421]],
		[[421, 421], 'valid'],
		[[422, 422], 'mapped', [640]],
		[[423, 423], 'mapped', [424]],
		[[424, 424], 'valid'],
		[[425, 425], 'mapped', [643]],
		[[426, 427], 'valid'],
		[[428, 428], 'mapped', [429]],
		[[429, 429], 'valid'],
		[[430, 430], 'mapped', [648]],
		[[431, 431], 'mapped', [432]],
		[[432, 432], 'valid'],
		[[433, 433], 'mapped', [650]],
		[[434, 434], 'mapped', [651]],
		[[435, 435], 'mapped', [436]],
		[[436, 436], 'valid'],
		[[437, 437], 'mapped', [438]],
		[[438, 438], 'valid'],
		[[439, 439], 'mapped', [658]],
		[[440, 440], 'mapped', [441]],
		[[441, 443], 'valid'],
		[[444, 444], 'mapped', [445]],
		[[445, 451], 'valid'],
		[[452, 454], 'mapped', [100, 382]],
		[[455, 457], 'mapped', [108, 106]],
		[[458, 460], 'mapped', [110, 106]],
		[[461, 461], 'mapped', [462]],
		[[462, 462], 'valid'],
		[[463, 463], 'mapped', [464]],
		[[464, 464], 'valid'],
		[[465, 465], 'mapped', [466]],
		[[466, 466], 'valid'],
		[[467, 467], 'mapped', [468]],
		[[468, 468], 'valid'],
		[[469, 469], 'mapped', [470]],
		[[470, 470], 'valid'],
		[[471, 471], 'mapped', [472]],
		[[472, 472], 'valid'],
		[[473, 473], 'mapped', [474]],
		[[474, 474], 'valid'],
		[[475, 475], 'mapped', [476]],
		[[476, 477], 'valid'],
		[[478, 478], 'mapped', [479]],
		[[479, 479], 'valid'],
		[[480, 480], 'mapped', [481]],
		[[481, 481], 'valid'],
		[[482, 482], 'mapped', [483]],
		[[483, 483], 'valid'],
		[[484, 484], 'mapped', [485]],
		[[485, 485], 'valid'],
		[[486, 486], 'mapped', [487]],
		[[487, 487], 'valid'],
		[[488, 488], 'mapped', [489]],
		[[489, 489], 'valid'],
		[[490, 490], 'mapped', [491]],
		[[491, 491], 'valid'],
		[[492, 492], 'mapped', [493]],
		[[493, 493], 'valid'],
		[[494, 494], 'mapped', [495]],
		[[495, 496], 'valid'],
		[[497, 499], 'mapped', [100, 122]],
		[[500, 500], 'mapped', [501]],
		[[501, 501], 'valid'],
		[[502, 502], 'mapped', [405]],
		[[503, 503], 'mapped', [447]],
		[[504, 504], 'mapped', [505]],
		[[505, 505], 'valid'],
		[[506, 506], 'mapped', [507]],
		[[507, 507], 'valid'],
		[[508, 508], 'mapped', [509]],
		[[509, 509], 'valid'],
		[[510, 510], 'mapped', [511]],
		[[511, 511], 'valid'],
		[[512, 512], 'mapped', [513]],
		[[513, 513], 'valid'],
		[[514, 514], 'mapped', [515]],
		[[515, 515], 'valid'],
		[[516, 516], 'mapped', [517]],
		[[517, 517], 'valid'],
		[[518, 518], 'mapped', [519]],
		[[519, 519], 'valid'],
		[[520, 520], 'mapped', [521]],
		[[521, 521], 'valid'],
		[[522, 522], 'mapped', [523]],
		[[523, 523], 'valid'],
		[[524, 524], 'mapped', [525]],
		[[525, 525], 'valid'],
		[[526, 526], 'mapped', [527]],
		[[527, 527], 'valid'],
		[[528, 528], 'mapped', [529]],
		[[529, 529], 'valid'],
		[[530, 530], 'mapped', [531]],
		[[531, 531], 'valid'],
		[[532, 532], 'mapped', [533]],
		[[533, 533], 'valid'],
		[[534, 534], 'mapped', [535]],
		[[535, 535], 'valid'],
		[[536, 536], 'mapped', [537]],
		[[537, 537], 'valid'],
		[[538, 538], 'mapped', [539]],
		[[539, 539], 'valid'],
		[[540, 540], 'mapped', [541]],
		[[541, 541], 'valid'],
		[[542, 542], 'mapped', [543]],
		[[543, 543], 'valid'],
		[[544, 544], 'mapped', [414]],
		[[545, 545], 'valid'],
		[[546, 546], 'mapped', [547]],
		[[547, 547], 'valid'],
		[[548, 548], 'mapped', [549]],
		[[549, 549], 'valid'],
		[[550, 550], 'mapped', [551]],
		[[551, 551], 'valid'],
		[[552, 552], 'mapped', [553]],
		[[553, 553], 'valid'],
		[[554, 554], 'mapped', [555]],
		[[555, 555], 'valid'],
		[[556, 556], 'mapped', [557]],
		[[557, 557], 'valid'],
		[[558, 558], 'mapped', [559]],
		[[559, 559], 'valid'],
		[[560, 560], 'mapped', [561]],
		[[561, 561], 'valid'],
		[[562, 562], 'mapped', [563]],
		[[563, 563], 'valid'],
		[[564, 566], 'valid'],
		[[567, 569], 'valid'],
		[[570, 570], 'mapped', [11365]],
		[[571, 571], 'mapped', [572]],
		[[572, 572], 'valid'],
		[[573, 573], 'mapped', [410]],
		[[574, 574], 'mapped', [11366]],
		[[575, 576], 'valid'],
		[[577, 577], 'mapped', [578]],
		[[578, 578], 'valid'],
		[[579, 579], 'mapped', [384]],
		[[580, 580], 'mapped', [649]],
		[[581, 581], 'mapped', [652]],
		[[582, 582], 'mapped', [583]],
		[[583, 583], 'valid'],
		[[584, 584], 'mapped', [585]],
		[[585, 585], 'valid'],
		[[586, 586], 'mapped', [587]],
		[[587, 587], 'valid'],
		[[588, 588], 'mapped', [589]],
		[[589, 589], 'valid'],
		[[590, 590], 'mapped', [591]],
		[[591, 591], 'valid'],
		[[592, 680], 'valid'],
		[[681, 685], 'valid'],
		[[686, 687], 'valid'],
		[[688, 688], 'mapped', [104]],
		[[689, 689], 'mapped', [614]],
		[[690, 690], 'mapped', [106]],
		[[691, 691], 'mapped', [114]],
		[[692, 692], 'mapped', [633]],
		[[693, 693], 'mapped', [635]],
		[[694, 694], 'mapped', [641]],
		[[695, 695], 'mapped', [119]],
		[[696, 696], 'mapped', [121]],
		[[697, 705], 'valid'],
		[[706, 709], 'valid', [], 'NV8'],
		[[710, 721], 'valid'],
		[[722, 727], 'valid', [], 'NV8'],
		[[728, 728], 'disallowed_STD3_mapped', [32, 774]],
		[[729, 729], 'disallowed_STD3_mapped', [32, 775]],
		[[730, 730], 'disallowed_STD3_mapped', [32, 778]],
		[[731, 731], 'disallowed_STD3_mapped', [32, 808]],
		[[732, 732], 'disallowed_STD3_mapped', [32, 771]],
		[[733, 733], 'disallowed_STD3_mapped', [32, 779]],
		[[734, 734], 'valid', [], 'NV8'],
		[[735, 735], 'valid', [], 'NV8'],
		[[736, 736], 'mapped', [611]],
		[[737, 737], 'mapped', [108]],
		[[738, 738], 'mapped', [115]],
		[[739, 739], 'mapped', [120]],
		[[740, 740], 'mapped', [661]],
		[[741, 745], 'valid', [], 'NV8'],
		[[746, 747], 'valid', [], 'NV8'],
		[[748, 748], 'valid'],
		[[749, 749], 'valid', [], 'NV8'],
		[[750, 750], 'valid'],
		[[751, 767], 'valid', [], 'NV8'],
		[[768, 831], 'valid'],
		[[832, 832], 'mapped', [768]],
		[[833, 833], 'mapped', [769]],
		[[834, 834], 'valid'],
		[[835, 835], 'mapped', [787]],
		[[836, 836], 'mapped', [776, 769]],
		[[837, 837], 'mapped', [953]],
		[[838, 846], 'valid'],
		[[847, 847], 'ignored'],
		[[848, 855], 'valid'],
		[[856, 860], 'valid'],
		[[861, 863], 'valid'],
		[[864, 865], 'valid'],
		[[866, 866], 'valid'],
		[[867, 879], 'valid'],
		[[880, 880], 'mapped', [881]],
		[[881, 881], 'valid'],
		[[882, 882], 'mapped', [883]],
		[[883, 883], 'valid'],
		[[884, 884], 'mapped', [697]],
		[[885, 885], 'valid'],
		[[886, 886], 'mapped', [887]],
		[[887, 887], 'valid'],
		[[888, 889], 'disallowed'],
		[[890, 890], 'disallowed_STD3_mapped', [32, 953]],
		[[891, 893], 'valid'],
		[[894, 894], 'disallowed_STD3_mapped', [59]],
		[[895, 895], 'mapped', [1011]],
		[[896, 899], 'disallowed'],
		[[900, 900], 'disallowed_STD3_mapped', [32, 769]],
		[[901, 901], 'disallowed_STD3_mapped', [32, 776, 769]],
		[[902, 902], 'mapped', [940]],
		[[903, 903], 'mapped', [183]],
		[[904, 904], 'mapped', [941]],
		[[905, 905], 'mapped', [942]],
		[[906, 906], 'mapped', [943]],
		[[907, 907], 'disallowed'],
		[[908, 908], 'mapped', [972]],
		[[909, 909], 'disallowed'],
		[[910, 910], 'mapped', [973]],
		[[911, 911], 'mapped', [974]],
		[[912, 912], 'valid'],
		[[913, 913], 'mapped', [945]],
		[[914, 914], 'mapped', [946]],
		[[915, 915], 'mapped', [947]],
		[[916, 916], 'mapped', [948]],
		[[917, 917], 'mapped', [949]],
		[[918, 918], 'mapped', [950]],
		[[919, 919], 'mapped', [951]],
		[[920, 920], 'mapped', [952]],
		[[921, 921], 'mapped', [953]],
		[[922, 922], 'mapped', [954]],
		[[923, 923], 'mapped', [955]],
		[[924, 924], 'mapped', [956]],
		[[925, 925], 'mapped', [957]],
		[[926, 926], 'mapped', [958]],
		[[927, 927], 'mapped', [959]],
		[[928, 928], 'mapped', [960]],
		[[929, 929], 'mapped', [961]],
		[[930, 930], 'disallowed'],
		[[931, 931], 'mapped', [963]],
		[[932, 932], 'mapped', [964]],
		[[933, 933], 'mapped', [965]],
		[[934, 934], 'mapped', [966]],
		[[935, 935], 'mapped', [967]],
		[[936, 936], 'mapped', [968]],
		[[937, 937], 'mapped', [969]],
		[[938, 938], 'mapped', [970]],
		[[939, 939], 'mapped', [971]],
		[[940, 961], 'valid'],
		[[962, 962], 'deviation', [963]],
		[[963, 974], 'valid'],
		[[975, 975], 'mapped', [983]],
		[[976, 976], 'mapped', [946]],
		[[977, 977], 'mapped', [952]],
		[[978, 978], 'mapped', [965]],
		[[979, 979], 'mapped', [973]],
		[[980, 980], 'mapped', [971]],
		[[981, 981], 'mapped', [966]],
		[[982, 982], 'mapped', [960]],
		[[983, 983], 'valid'],
		[[984, 984], 'mapped', [985]],
		[[985, 985], 'valid'],
		[[986, 986], 'mapped', [987]],
		[[987, 987], 'valid'],
		[[988, 988], 'mapped', [989]],
		[[989, 989], 'valid'],
		[[990, 990], 'mapped', [991]],
		[[991, 991], 'valid'],
		[[992, 992], 'mapped', [993]],
		[[993, 993], 'valid'],
		[[994, 994], 'mapped', [995]],
		[[995, 995], 'valid'],
		[[996, 996], 'mapped', [997]],
		[[997, 997], 'valid'],
		[[998, 998], 'mapped', [999]],
		[[999, 999], 'valid'],
		[[1000, 1000], 'mapped', [1001]],
		[[1001, 1001], 'valid'],
		[[1002, 1002], 'mapped', [1003]],
		[[1003, 1003], 'valid'],
		[[1004, 1004], 'mapped', [1005]],
		[[1005, 1005], 'valid'],
		[[1006, 1006], 'mapped', [1007]],
		[[1007, 1007], 'valid'],
		[[1008, 1008], 'mapped', [954]],
		[[1009, 1009], 'mapped', [961]],
		[[1010, 1010], 'mapped', [963]],
		[[1011, 1011], 'valid'],
		[[1012, 1012], 'mapped', [952]],
		[[1013, 1013], 'mapped', [949]],
		[[1014, 1014], 'valid', [], 'NV8'],
		[[1015, 1015], 'mapped', [1016]],
		[[1016, 1016], 'valid'],
		[[1017, 1017], 'mapped', [963]],
		[[1018, 1018], 'mapped', [1019]],
		[[1019, 1019], 'valid'],
		[[1020, 1020], 'valid'],
		[[1021, 1021], 'mapped', [891]],
		[[1022, 1022], 'mapped', [892]],
		[[1023, 1023], 'mapped', [893]],
		[[1024, 1024], 'mapped', [1104]],
		[[1025, 1025], 'mapped', [1105]],
		[[1026, 1026], 'mapped', [1106]],
		[[1027, 1027], 'mapped', [1107]],
		[[1028, 1028], 'mapped', [1108]],
		[[1029, 1029], 'mapped', [1109]],
		[[1030, 1030], 'mapped', [1110]],
		[[1031, 1031], 'mapped', [1111]],
		[[1032, 1032], 'mapped', [1112]],
		[[1033, 1033], 'mapped', [1113]],
		[[1034, 1034], 'mapped', [1114]],
		[[1035, 1035], 'mapped', [1115]],
		[[1036, 1036], 'mapped', [1116]],
		[[1037, 1037], 'mapped', [1117]],
		[[1038, 1038], 'mapped', [1118]],
		[[1039, 1039], 'mapped', [1119]],
		[[1040, 1040], 'mapped', [1072]],
		[[1041, 1041], 'mapped', [1073]],
		[[1042, 1042], 'mapped', [1074]],
		[[1043, 1043], 'mapped', [1075]],
		[[1044, 1044], 'mapped', [1076]],
		[[1045, 1045], 'mapped', [1077]],
		[[1046, 1046], 'mapped', [1078]],
		[[1047, 1047], 'mapped', [1079]],
		[[1048, 1048], 'mapped', [1080]],
		[[1049, 1049], 'mapped', [1081]],
		[[1050, 1050], 'mapped', [1082]],
		[[1051, 1051], 'mapped', [1083]],
		[[1052, 1052], 'mapped', [1084]],
		[[1053, 1053], 'mapped', [1085]],
		[[1054, 1054], 'mapped', [1086]],
		[[1055, 1055], 'mapped', [1087]],
		[[1056, 1056], 'mapped', [1088]],
		[[1057, 1057], 'mapped', [1089]],
		[[1058, 1058], 'mapped', [1090]],
		[[1059, 1059], 'mapped', [1091]],
		[[1060, 1060], 'mapped', [1092]],
		[[1061, 1061], 'mapped', [1093]],
		[[1062, 1062], 'mapped', [1094]],
		[[1063, 1063], 'mapped', [1095]],
		[[1064, 1064], 'mapped', [1096]],
		[[1065, 1065], 'mapped', [1097]],
		[[1066, 1066], 'mapped', [1098]],
		[[1067, 1067], 'mapped', [1099]],
		[[1068, 1068], 'mapped', [1100]],
		[[1069, 1069], 'mapped', [1101]],
		[[1070, 1070], 'mapped', [1102]],
		[[1071, 1071], 'mapped', [1103]],
		[[1072, 1103], 'valid'],
		[[1104, 1104], 'valid'],
		[[1105, 1116], 'valid'],
		[[1117, 1117], 'valid'],
		[[1118, 1119], 'valid'],
		[[1120, 1120], 'mapped', [1121]],
		[[1121, 1121], 'valid'],
		[[1122, 1122], 'mapped', [1123]],
		[[1123, 1123], 'valid'],
		[[1124, 1124], 'mapped', [1125]],
		[[1125, 1125], 'valid'],
		[[1126, 1126], 'mapped', [1127]],
		[[1127, 1127], 'valid'],
		[[1128, 1128], 'mapped', [1129]],
		[[1129, 1129], 'valid'],
		[[1130, 1130], 'mapped', [1131]],
		[[1131, 1131], 'valid'],
		[[1132, 1132], 'mapped', [1133]],
		[[1133, 1133], 'valid'],
		[[1134, 1134], 'mapped', [1135]],
		[[1135, 1135], 'valid'],
		[[1136, 1136], 'mapped', [1137]],
		[[1137, 1137], 'valid'],
		[[1138, 1138], 'mapped', [1139]],
		[[1139, 1139], 'valid'],
		[[1140, 1140], 'mapped', [1141]],
		[[1141, 1141], 'valid'],
		[[1142, 1142], 'mapped', [1143]],
		[[1143, 1143], 'valid'],
		[[1144, 1144], 'mapped', [1145]],
		[[1145, 1145], 'valid'],
		[[1146, 1146], 'mapped', [1147]],
		[[1147, 1147], 'valid'],
		[[1148, 1148], 'mapped', [1149]],
		[[1149, 1149], 'valid'],
		[[1150, 1150], 'mapped', [1151]],
		[[1151, 1151], 'valid'],
		[[1152, 1152], 'mapped', [1153]],
		[[1153, 1153], 'valid'],
		[[1154, 1154], 'valid', [], 'NV8'],
		[[1155, 1158], 'valid'],
		[[1159, 1159], 'valid'],
		[[1160, 1161], 'valid', [], 'NV8'],
		[[1162, 1162], 'mapped', [1163]],
		[[1163, 1163], 'valid'],
		[[1164, 1164], 'mapped', [1165]],
		[[1165, 1165], 'valid'],
		[[1166, 1166], 'mapped', [1167]],
		[[1167, 1167], 'valid'],
		[[1168, 1168], 'mapped', [1169]],
		[[1169, 1169], 'valid'],
		[[1170, 1170], 'mapped', [1171]],
		[[1171, 1171], 'valid'],
		[[1172, 1172], 'mapped', [1173]],
		[[1173, 1173], 'valid'],
		[[1174, 1174], 'mapped', [1175]],
		[[1175, 1175], 'valid'],
		[[1176, 1176], 'mapped', [1177]],
		[[1177, 1177], 'valid'],
		[[1178, 1178], 'mapped', [1179]],
		[[1179, 1179], 'valid'],
		[[1180, 1180], 'mapped', [1181]],
		[[1181, 1181], 'valid'],
		[[1182, 1182], 'mapped', [1183]],
		[[1183, 1183], 'valid'],
		[[1184, 1184], 'mapped', [1185]],
		[[1185, 1185], 'valid'],
		[[1186, 1186], 'mapped', [1187]],
		[[1187, 1187], 'valid'],
		[[1188, 1188], 'mapped', [1189]],
		[[1189, 1189], 'valid'],
		[[1190, 1190], 'mapped', [1191]],
		[[1191, 1191], 'valid'],
		[[1192, 1192], 'mapped', [1193]],
		[[1193, 1193], 'valid'],
		[[1194, 1194], 'mapped', [1195]],
		[[1195, 1195], 'valid'],
		[[1196, 1196], 'mapped', [1197]],
		[[1197, 1197], 'valid'],
		[[1198, 1198], 'mapped', [1199]],
		[[1199, 1199], 'valid'],
		[[1200, 1200], 'mapped', [1201]],
		[[1201, 1201], 'valid'],
		[[1202, 1202], 'mapped', [1203]],
		[[1203, 1203], 'valid'],
		[[1204, 1204], 'mapped', [1205]],
		[[1205, 1205], 'valid'],
		[[1206, 1206], 'mapped', [1207]],
		[[1207, 1207], 'valid'],
		[[1208, 1208], 'mapped', [1209]],
		[[1209, 1209], 'valid'],
		[[1210, 1210], 'mapped', [1211]],
		[[1211, 1211], 'valid'],
		[[1212, 1212], 'mapped', [1213]],
		[[1213, 1213], 'valid'],
		[[1214, 1214], 'mapped', [1215]],
		[[1215, 1215], 'valid'],
		[[1216, 1216], 'disallowed'],
		[[1217, 1217], 'mapped', [1218]],
		[[1218, 1218], 'valid'],
		[[1219, 1219], 'mapped', [1220]],
		[[1220, 1220], 'valid'],
		[[1221, 1221], 'mapped', [1222]],
		[[1222, 1222], 'valid'],
		[[1223, 1223], 'mapped', [1224]],
		[[1224, 1224], 'valid'],
		[[1225, 1225], 'mapped', [1226]],
		[[1226, 1226], 'valid'],
		[[1227, 1227], 'mapped', [1228]],
		[[1228, 1228], 'valid'],
		[[1229, 1229], 'mapped', [1230]],
		[[1230, 1230], 'valid'],
		[[1231, 1231], 'valid'],
		[[1232, 1232], 'mapped', [1233]],
		[[1233, 1233], 'valid'],
		[[1234, 1234], 'mapped', [1235]],
		[[1235, 1235], 'valid'],
		[[1236, 1236], 'mapped', [1237]],
		[[1237, 1237], 'valid'],
		[[1238, 1238], 'mapped', [1239]],
		[[1239, 1239], 'valid'],
		[[1240, 1240], 'mapped', [1241]],
		[[1241, 1241], 'valid'],
		[[1242, 1242], 'mapped', [1243]],
		[[1243, 1243], 'valid'],
		[[1244, 1244], 'mapped', [1245]],
		[[1245, 1245], 'valid'],
		[[1246, 1246], 'mapped', [1247]],
		[[1247, 1247], 'valid'],
		[[1248, 1248], 'mapped', [1249]],
		[[1249, 1249], 'valid'],
		[[1250, 1250], 'mapped', [1251]],
		[[1251, 1251], 'valid'],
		[[1252, 1252], 'mapped', [1253]],
		[[1253, 1253], 'valid'],
		[[1254, 1254], 'mapped', [1255]],
		[[1255, 1255], 'valid'],
		[[1256, 1256], 'mapped', [1257]],
		[[1257, 1257], 'valid'],
		[[1258, 1258], 'mapped', [1259]],
		[[1259, 1259], 'valid'],
		[[1260, 1260], 'mapped', [1261]],
		[[1261, 1261], 'valid'],
		[[1262, 1262], 'mapped', [1263]],
		[[1263, 1263], 'valid'],
		[[1264, 1264], 'mapped', [1265]],
		[[1265, 1265], 'valid'],
		[[1266, 1266], 'mapped', [1267]],
		[[1267, 1267], 'valid'],
		[[1268, 1268], 'mapped', [1269]],
		[[1269, 1269], 'valid'],
		[[1270, 1270], 'mapped', [1271]],
		[[1271, 1271], 'valid'],
		[[1272, 1272], 'mapped', [1273]],
		[[1273, 1273], 'valid'],
		[[1274, 1274], 'mapped', [1275]],
		[[1275, 1275], 'valid'],
		[[1276, 1276], 'mapped', [1277]],
		[[1277, 1277], 'valid'],
		[[1278, 1278], 'mapped', [1279]],
		[[1279, 1279], 'valid'],
		[[1280, 1280], 'mapped', [1281]],
		[[1281, 1281], 'valid'],
		[[1282, 1282], 'mapped', [1283]],
		[[1283, 1283], 'valid'],
		[[1284, 1284], 'mapped', [1285]],
		[[1285, 1285], 'valid'],
		[[1286, 1286], 'mapped', [1287]],
		[[1287, 1287], 'valid'],
		[[1288, 1288], 'mapped', [1289]],
		[[1289, 1289], 'valid'],
		[[1290, 1290], 'mapped', [1291]],
		[[1291, 1291], 'valid'],
		[[1292, 1292], 'mapped', [1293]],
		[[1293, 1293], 'valid'],
		[[1294, 1294], 'mapped', [1295]],
		[[1295, 1295], 'valid'],
		[[1296, 1296], 'mapped', [1297]],
		[[1297, 1297], 'valid'],
		[[1298, 1298], 'mapped', [1299]],
		[[1299, 1299], 'valid'],
		[[1300, 1300], 'mapped', [1301]],
		[[1301, 1301], 'valid'],
		[[1302, 1302], 'mapped', [1303]],
		[[1303, 1303], 'valid'],
		[[1304, 1304], 'mapped', [1305]],
		[[1305, 1305], 'valid'],
		[[1306, 1306], 'mapped', [1307]],
		[[1307, 1307], 'valid'],
		[[1308, 1308], 'mapped', [1309]],
		[[1309, 1309], 'valid'],
		[[1310, 1310], 'mapped', [1311]],
		[[1311, 1311], 'valid'],
		[[1312, 1312], 'mapped', [1313]],
		[[1313, 1313], 'valid'],
		[[1314, 1314], 'mapped', [1315]],
		[[1315, 1315], 'valid'],
		[[1316, 1316], 'mapped', [1317]],
		[[1317, 1317], 'valid'],
		[[1318, 1318], 'mapped', [1319]],
		[[1319, 1319], 'valid'],
		[[1320, 1320], 'mapped', [1321]],
		[[1321, 1321], 'valid'],
		[[1322, 1322], 'mapped', [1323]],
		[[1323, 1323], 'valid'],
		[[1324, 1324], 'mapped', [1325]],
		[[1325, 1325], 'valid'],
		[[1326, 1326], 'mapped', [1327]],
		[[1327, 1327], 'valid'],
		[[1328, 1328], 'disallowed'],
		[[1329, 1329], 'mapped', [1377]],
		[[1330, 1330], 'mapped', [1378]],
		[[1331, 1331], 'mapped', [1379]],
		[[1332, 1332], 'mapped', [1380]],
		[[1333, 1333], 'mapped', [1381]],
		[[1334, 1334], 'mapped', [1382]],
		[[1335, 1335], 'mapped', [1383]],
		[[1336, 1336], 'mapped', [1384]],
		[[1337, 1337], 'mapped', [1385]],
		[[1338, 1338], 'mapped', [1386]],
		[[1339, 1339], 'mapped', [1387]],
		[[1340, 1340], 'mapped', [1388]],
		[[1341, 1341], 'mapped', [1389]],
		[[1342, 1342], 'mapped', [1390]],
		[[1343, 1343], 'mapped', [1391]],
		[[1344, 1344], 'mapped', [1392]],
		[[1345, 1345], 'mapped', [1393]],
		[[1346, 1346], 'mapped', [1394]],
		[[1347, 1347], 'mapped', [1395]],
		[[1348, 1348], 'mapped', [1396]],
		[[1349, 1349], 'mapped', [1397]],
		[[1350, 1350], 'mapped', [1398]],
		[[1351, 1351], 'mapped', [1399]],
		[[1352, 1352], 'mapped', [1400]],
		[[1353, 1353], 'mapped', [1401]],
		[[1354, 1354], 'mapped', [1402]],
		[[1355, 1355], 'mapped', [1403]],
		[[1356, 1356], 'mapped', [1404]],
		[[1357, 1357], 'mapped', [1405]],
		[[1358, 1358], 'mapped', [1406]],
		[[1359, 1359], 'mapped', [1407]],
		[[1360, 1360], 'mapped', [1408]],
		[[1361, 1361], 'mapped', [1409]],
		[[1362, 1362], 'mapped', [1410]],
		[[1363, 1363], 'mapped', [1411]],
		[[1364, 1364], 'mapped', [1412]],
		[[1365, 1365], 'mapped', [1413]],
		[[1366, 1366], 'mapped', [1414]],
		[[1367, 1368], 'disallowed'],
		[[1369, 1369], 'valid'],
		[[1370, 1375], 'valid', [], 'NV8'],
		[[1376, 1376], 'disallowed'],
		[[1377, 1414], 'valid'],
		[[1415, 1415], 'mapped', [1381, 1410]],
		[[1416, 1416], 'disallowed'],
		[[1417, 1417], 'valid', [], 'NV8'],
		[[1418, 1418], 'valid', [], 'NV8'],
		[[1419, 1420], 'disallowed'],
		[[1421, 1422], 'valid', [], 'NV8'],
		[[1423, 1423], 'valid', [], 'NV8'],
		[[1424, 1424], 'disallowed'],
		[[1425, 1441], 'valid'],
		[[1442, 1442], 'valid'],
		[[1443, 1455], 'valid'],
		[[1456, 1465], 'valid'],
		[[1466, 1466], 'valid'],
		[[1467, 1469], 'valid'],
		[[1470, 1470], 'valid', [], 'NV8'],
		[[1471, 1471], 'valid'],
		[[1472, 1472], 'valid', [], 'NV8'],
		[[1473, 1474], 'valid'],
		[[1475, 1475], 'valid', [], 'NV8'],
		[[1476, 1476], 'valid'],
		[[1477, 1477], 'valid'],
		[[1478, 1478], 'valid', [], 'NV8'],
		[[1479, 1479], 'valid'],
		[[1480, 1487], 'disallowed'],
		[[1488, 1514], 'valid'],
		[[1515, 1519], 'disallowed'],
		[[1520, 1524], 'valid'],
		[[1525, 1535], 'disallowed'],
		[[1536, 1539], 'disallowed'],
		[[1540, 1540], 'disallowed'],
		[[1541, 1541], 'disallowed'],
		[[1542, 1546], 'valid', [], 'NV8'],
		[[1547, 1547], 'valid', [], 'NV8'],
		[[1548, 1548], 'valid', [], 'NV8'],
		[[1549, 1551], 'valid', [], 'NV8'],
		[[1552, 1557], 'valid'],
		[[1558, 1562], 'valid'],
		[[1563, 1563], 'valid', [], 'NV8'],
		[[1564, 1564], 'disallowed'],
		[[1565, 1565], 'disallowed'],
		[[1566, 1566], 'valid', [], 'NV8'],
		[[1567, 1567], 'valid', [], 'NV8'],
		[[1568, 1568], 'valid'],
		[[1569, 1594], 'valid'],
		[[1595, 1599], 'valid'],
		[[1600, 1600], 'valid', [], 'NV8'],
		[[1601, 1618], 'valid'],
		[[1619, 1621], 'valid'],
		[[1622, 1624], 'valid'],
		[[1625, 1630], 'valid'],
		[[1631, 1631], 'valid'],
		[[1632, 1641], 'valid'],
		[[1642, 1645], 'valid', [], 'NV8'],
		[[1646, 1647], 'valid'],
		[[1648, 1652], 'valid'],
		[[1653, 1653], 'mapped', [1575, 1652]],
		[[1654, 1654], 'mapped', [1608, 1652]],
		[[1655, 1655], 'mapped', [1735, 1652]],
		[[1656, 1656], 'mapped', [1610, 1652]],
		[[1657, 1719], 'valid'],
		[[1720, 1721], 'valid'],
		[[1722, 1726], 'valid'],
		[[1727, 1727], 'valid'],
		[[1728, 1742], 'valid'],
		[[1743, 1743], 'valid'],
		[[1744, 1747], 'valid'],
		[[1748, 1748], 'valid', [], 'NV8'],
		[[1749, 1756], 'valid'],
		[[1757, 1757], 'disallowed'],
		[[1758, 1758], 'valid', [], 'NV8'],
		[[1759, 1768], 'valid'],
		[[1769, 1769], 'valid', [], 'NV8'],
		[[1770, 1773], 'valid'],
		[[1774, 1775], 'valid'],
		[[1776, 1785], 'valid'],
		[[1786, 1790], 'valid'],
		[[1791, 1791], 'valid'],
		[[1792, 1805], 'valid', [], 'NV8'],
		[[1806, 1806], 'disallowed'],
		[[1807, 1807], 'disallowed'],
		[[1808, 1836], 'valid'],
		[[1837, 1839], 'valid'],
		[[1840, 1866], 'valid'],
		[[1867, 1868], 'disallowed'],
		[[1869, 1871], 'valid'],
		[[1872, 1901], 'valid'],
		[[1902, 1919], 'valid'],
		[[1920, 1968], 'valid'],
		[[1969, 1969], 'valid'],
		[[1970, 1983], 'disallowed'],
		[[1984, 2037], 'valid'],
		[[2038, 2042], 'valid', [], 'NV8'],
		[[2043, 2047], 'disallowed'],
		[[2048, 2093], 'valid'],
		[[2094, 2095], 'disallowed'],
		[[2096, 2110], 'valid', [], 'NV8'],
		[[2111, 2111], 'disallowed'],
		[[2112, 2139], 'valid'],
		[[2140, 2141], 'disallowed'],
		[[2142, 2142], 'valid', [], 'NV8'],
		[[2143, 2207], 'disallowed'],
		[[2208, 2208], 'valid'],
		[[2209, 2209], 'valid'],
		[[2210, 2220], 'valid'],
		[[2221, 2226], 'valid'],
		[[2227, 2228], 'valid'],
		[[2229, 2274], 'disallowed'],
		[[2275, 2275], 'valid'],
		[[2276, 2302], 'valid'],
		[[2303, 2303], 'valid'],
		[[2304, 2304], 'valid'],
		[[2305, 2307], 'valid'],
		[[2308, 2308], 'valid'],
		[[2309, 2361], 'valid'],
		[[2362, 2363], 'valid'],
		[[2364, 2381], 'valid'],
		[[2382, 2382], 'valid'],
		[[2383, 2383], 'valid'],
		[[2384, 2388], 'valid'],
		[[2389, 2389], 'valid'],
		[[2390, 2391], 'valid'],
		[[2392, 2392], 'mapped', [2325, 2364]],
		[[2393, 2393], 'mapped', [2326, 2364]],
		[[2394, 2394], 'mapped', [2327, 2364]],
		[[2395, 2395], 'mapped', [2332, 2364]],
		[[2396, 2396], 'mapped', [2337, 2364]],
		[[2397, 2397], 'mapped', [2338, 2364]],
		[[2398, 2398], 'mapped', [2347, 2364]],
		[[2399, 2399], 'mapped', [2351, 2364]],
		[[2400, 2403], 'valid'],
		[[2404, 2405], 'valid', [], 'NV8'],
		[[2406, 2415], 'valid'],
		[[2416, 2416], 'valid', [], 'NV8'],
		[[2417, 2418], 'valid'],
		[[2419, 2423], 'valid'],
		[[2424, 2424], 'valid'],
		[[2425, 2426], 'valid'],
		[[2427, 2428], 'valid'],
		[[2429, 2429], 'valid'],
		[[2430, 2431], 'valid'],
		[[2432, 2432], 'valid'],
		[[2433, 2435], 'valid'],
		[[2436, 2436], 'disallowed'],
		[[2437, 2444], 'valid'],
		[[2445, 2446], 'disallowed'],
		[[2447, 2448], 'valid'],
		[[2449, 2450], 'disallowed'],
		[[2451, 2472], 'valid'],
		[[2473, 2473], 'disallowed'],
		[[2474, 2480], 'valid'],
		[[2481, 2481], 'disallowed'],
		[[2482, 2482], 'valid'],
		[[2483, 2485], 'disallowed'],
		[[2486, 2489], 'valid'],
		[[2490, 2491], 'disallowed'],
		[[2492, 2492], 'valid'],
		[[2493, 2493], 'valid'],
		[[2494, 2500], 'valid'],
		[[2501, 2502], 'disallowed'],
		[[2503, 2504], 'valid'],
		[[2505, 2506], 'disallowed'],
		[[2507, 2509], 'valid'],
		[[2510, 2510], 'valid'],
		[[2511, 2518], 'disallowed'],
		[[2519, 2519], 'valid'],
		[[2520, 2523], 'disallowed'],
		[[2524, 2524], 'mapped', [2465, 2492]],
		[[2525, 2525], 'mapped', [2466, 2492]],
		[[2526, 2526], 'disallowed'],
		[[2527, 2527], 'mapped', [2479, 2492]],
		[[2528, 2531], 'valid'],
		[[2532, 2533], 'disallowed'],
		[[2534, 2545], 'valid'],
		[[2546, 2554], 'valid', [], 'NV8'],
		[[2555, 2555], 'valid', [], 'NV8'],
		[[2556, 2560], 'disallowed'],
		[[2561, 2561], 'valid'],
		[[2562, 2562], 'valid'],
		[[2563, 2563], 'valid'],
		[[2564, 2564], 'disallowed'],
		[[2565, 2570], 'valid'],
		[[2571, 2574], 'disallowed'],
		[[2575, 2576], 'valid'],
		[[2577, 2578], 'disallowed'],
		[[2579, 2600], 'valid'],
		[[2601, 2601], 'disallowed'],
		[[2602, 2608], 'valid'],
		[[2609, 2609], 'disallowed'],
		[[2610, 2610], 'valid'],
		[[2611, 2611], 'mapped', [2610, 2620]],
		[[2612, 2612], 'disallowed'],
		[[2613, 2613], 'valid'],
		[[2614, 2614], 'mapped', [2616, 2620]],
		[[2615, 2615], 'disallowed'],
		[[2616, 2617], 'valid'],
		[[2618, 2619], 'disallowed'],
		[[2620, 2620], 'valid'],
		[[2621, 2621], 'disallowed'],
		[[2622, 2626], 'valid'],
		[[2627, 2630], 'disallowed'],
		[[2631, 2632], 'valid'],
		[[2633, 2634], 'disallowed'],
		[[2635, 2637], 'valid'],
		[[2638, 2640], 'disallowed'],
		[[2641, 2641], 'valid'],
		[[2642, 2648], 'disallowed'],
		[[2649, 2649], 'mapped', [2582, 2620]],
		[[2650, 2650], 'mapped', [2583, 2620]],
		[[2651, 2651], 'mapped', [2588, 2620]],
		[[2652, 2652], 'valid'],
		[[2653, 2653], 'disallowed'],
		[[2654, 2654], 'mapped', [2603, 2620]],
		[[2655, 2661], 'disallowed'],
		[[2662, 2676], 'valid'],
		[[2677, 2677], 'valid'],
		[[2678, 2688], 'disallowed'],
		[[2689, 2691], 'valid'],
		[[2692, 2692], 'disallowed'],
		[[2693, 2699], 'valid'],
		[[2700, 2700], 'valid'],
		[[2701, 2701], 'valid'],
		[[2702, 2702], 'disallowed'],
		[[2703, 2705], 'valid'],
		[[2706, 2706], 'disallowed'],
		[[2707, 2728], 'valid'],
		[[2729, 2729], 'disallowed'],
		[[2730, 2736], 'valid'],
		[[2737, 2737], 'disallowed'],
		[[2738, 2739], 'valid'],
		[[2740, 2740], 'disallowed'],
		[[2741, 2745], 'valid'],
		[[2746, 2747], 'disallowed'],
		[[2748, 2757], 'valid'],
		[[2758, 2758], 'disallowed'],
		[[2759, 2761], 'valid'],
		[[2762, 2762], 'disallowed'],
		[[2763, 2765], 'valid'],
		[[2766, 2767], 'disallowed'],
		[[2768, 2768], 'valid'],
		[[2769, 2783], 'disallowed'],
		[[2784, 2784], 'valid'],
		[[2785, 2787], 'valid'],
		[[2788, 2789], 'disallowed'],
		[[2790, 2799], 'valid'],
		[[2800, 2800], 'valid', [], 'NV8'],
		[[2801, 2801], 'valid', [], 'NV8'],
		[[2802, 2808], 'disallowed'],
		[[2809, 2809], 'valid'],
		[[2810, 2816], 'disallowed'],
		[[2817, 2819], 'valid'],
		[[2820, 2820], 'disallowed'],
		[[2821, 2828], 'valid'],
		[[2829, 2830], 'disallowed'],
		[[2831, 2832], 'valid'],
		[[2833, 2834], 'disallowed'],
		[[2835, 2856], 'valid'],
		[[2857, 2857], 'disallowed'],
		[[2858, 2864], 'valid'],
		[[2865, 2865], 'disallowed'],
		[[2866, 2867], 'valid'],
		[[2868, 2868], 'disallowed'],
		[[2869, 2869], 'valid'],
		[[2870, 2873], 'valid'],
		[[2874, 2875], 'disallowed'],
		[[2876, 2883], 'valid'],
		[[2884, 2884], 'valid'],
		[[2885, 2886], 'disallowed'],
		[[2887, 2888], 'valid'],
		[[2889, 2890], 'disallowed'],
		[[2891, 2893], 'valid'],
		[[2894, 2901], 'disallowed'],
		[[2902, 2903], 'valid'],
		[[2904, 2907], 'disallowed'],
		[[2908, 2908], 'mapped', [2849, 2876]],
		[[2909, 2909], 'mapped', [2850, 2876]],
		[[2910, 2910], 'disallowed'],
		[[2911, 2913], 'valid'],
		[[2914, 2915], 'valid'],
		[[2916, 2917], 'disallowed'],
		[[2918, 2927], 'valid'],
		[[2928, 2928], 'valid', [], 'NV8'],
		[[2929, 2929], 'valid'],
		[[2930, 2935], 'valid', [], 'NV8'],
		[[2936, 2945], 'disallowed'],
		[[2946, 2947], 'valid'],
		[[2948, 2948], 'disallowed'],
		[[2949, 2954], 'valid'],
		[[2955, 2957], 'disallowed'],
		[[2958, 2960], 'valid'],
		[[2961, 2961], 'disallowed'],
		[[2962, 2965], 'valid'],
		[[2966, 2968], 'disallowed'],
		[[2969, 2970], 'valid'],
		[[2971, 2971], 'disallowed'],
		[[2972, 2972], 'valid'],
		[[2973, 2973], 'disallowed'],
		[[2974, 2975], 'valid'],
		[[2976, 2978], 'disallowed'],
		[[2979, 2980], 'valid'],
		[[2981, 2983], 'disallowed'],
		[[2984, 2986], 'valid'],
		[[2987, 2989], 'disallowed'],
		[[2990, 2997], 'valid'],
		[[2998, 2998], 'valid'],
		[[2999, 3001], 'valid'],
		[[3002, 3005], 'disallowed'],
		[[3006, 3010], 'valid'],
		[[3011, 3013], 'disallowed'],
		[[3014, 3016], 'valid'],
		[[3017, 3017], 'disallowed'],
		[[3018, 3021], 'valid'],
		[[3022, 3023], 'disallowed'],
		[[3024, 3024], 'valid'],
		[[3025, 3030], 'disallowed'],
		[[3031, 3031], 'valid'],
		[[3032, 3045], 'disallowed'],
		[[3046, 3046], 'valid'],
		[[3047, 3055], 'valid'],
		[[3056, 3058], 'valid', [], 'NV8'],
		[[3059, 3066], 'valid', [], 'NV8'],
		[[3067, 3071], 'disallowed'],
		[[3072, 3072], 'valid'],
		[[3073, 3075], 'valid'],
		[[3076, 3076], 'disallowed'],
		[[3077, 3084], 'valid'],
		[[3085, 3085], 'disallowed'],
		[[3086, 3088], 'valid'],
		[[3089, 3089], 'disallowed'],
		[[3090, 3112], 'valid'],
		[[3113, 3113], 'disallowed'],
		[[3114, 3123], 'valid'],
		[[3124, 3124], 'valid'],
		[[3125, 3129], 'valid'],
		[[3130, 3132], 'disallowed'],
		[[3133, 3133], 'valid'],
		[[3134, 3140], 'valid'],
		[[3141, 3141], 'disallowed'],
		[[3142, 3144], 'valid'],
		[[3145, 3145], 'disallowed'],
		[[3146, 3149], 'valid'],
		[[3150, 3156], 'disallowed'],
		[[3157, 3158], 'valid'],
		[[3159, 3159], 'disallowed'],
		[[3160, 3161], 'valid'],
		[[3162, 3162], 'valid'],
		[[3163, 3167], 'disallowed'],
		[[3168, 3169], 'valid'],
		[[3170, 3171], 'valid'],
		[[3172, 3173], 'disallowed'],
		[[3174, 3183], 'valid'],
		[[3184, 3191], 'disallowed'],
		[[3192, 3199], 'valid', [], 'NV8'],
		[[3200, 3200], 'disallowed'],
		[[3201, 3201], 'valid'],
		[[3202, 3203], 'valid'],
		[[3204, 3204], 'disallowed'],
		[[3205, 3212], 'valid'],
		[[3213, 3213], 'disallowed'],
		[[3214, 3216], 'valid'],
		[[3217, 3217], 'disallowed'],
		[[3218, 3240], 'valid'],
		[[3241, 3241], 'disallowed'],
		[[3242, 3251], 'valid'],
		[[3252, 3252], 'disallowed'],
		[[3253, 3257], 'valid'],
		[[3258, 3259], 'disallowed'],
		[[3260, 3261], 'valid'],
		[[3262, 3268], 'valid'],
		[[3269, 3269], 'disallowed'],
		[[3270, 3272], 'valid'],
		[[3273, 3273], 'disallowed'],
		[[3274, 3277], 'valid'],
		[[3278, 3284], 'disallowed'],
		[[3285, 3286], 'valid'],
		[[3287, 3293], 'disallowed'],
		[[3294, 3294], 'valid'],
		[[3295, 3295], 'disallowed'],
		[[3296, 3297], 'valid'],
		[[3298, 3299], 'valid'],
		[[3300, 3301], 'disallowed'],
		[[3302, 3311], 'valid'],
		[[3312, 3312], 'disallowed'],
		[[3313, 3314], 'valid'],
		[[3315, 3328], 'disallowed'],
		[[3329, 3329], 'valid'],
		[[3330, 3331], 'valid'],
		[[3332, 3332], 'disallowed'],
		[[3333, 3340], 'valid'],
		[[3341, 3341], 'disallowed'],
		[[3342, 3344], 'valid'],
		[[3345, 3345], 'disallowed'],
		[[3346, 3368], 'valid'],
		[[3369, 3369], 'valid'],
		[[3370, 3385], 'valid'],
		[[3386, 3386], 'valid'],
		[[3387, 3388], 'disallowed'],
		[[3389, 3389], 'valid'],
		[[3390, 3395], 'valid'],
		[[3396, 3396], 'valid'],
		[[3397, 3397], 'disallowed'],
		[[3398, 3400], 'valid'],
		[[3401, 3401], 'disallowed'],
		[[3402, 3405], 'valid'],
		[[3406, 3406], 'valid'],
		[[3407, 3414], 'disallowed'],
		[[3415, 3415], 'valid'],
		[[3416, 3422], 'disallowed'],
		[[3423, 3423], 'valid'],
		[[3424, 3425], 'valid'],
		[[3426, 3427], 'valid'],
		[[3428, 3429], 'disallowed'],
		[[3430, 3439], 'valid'],
		[[3440, 3445], 'valid', [], 'NV8'],
		[[3446, 3448], 'disallowed'],
		[[3449, 3449], 'valid', [], 'NV8'],
		[[3450, 3455], 'valid'],
		[[3456, 3457], 'disallowed'],
		[[3458, 3459], 'valid'],
		[[3460, 3460], 'disallowed'],
		[[3461, 3478], 'valid'],
		[[3479, 3481], 'disallowed'],
		[[3482, 3505], 'valid'],
		[[3506, 3506], 'disallowed'],
		[[3507, 3515], 'valid'],
		[[3516, 3516], 'disallowed'],
		[[3517, 3517], 'valid'],
		[[3518, 3519], 'disallowed'],
		[[3520, 3526], 'valid'],
		[[3527, 3529], 'disallowed'],
		[[3530, 3530], 'valid'],
		[[3531, 3534], 'disallowed'],
		[[3535, 3540], 'valid'],
		[[3541, 3541], 'disallowed'],
		[[3542, 3542], 'valid'],
		[[3543, 3543], 'disallowed'],
		[[3544, 3551], 'valid'],
		[[3552, 3557], 'disallowed'],
		[[3558, 3567], 'valid'],
		[[3568, 3569], 'disallowed'],
		[[3570, 3571], 'valid'],
		[[3572, 3572], 'valid', [], 'NV8'],
		[[3573, 3584], 'disallowed'],
		[[3585, 3634], 'valid'],
		[[3635, 3635], 'mapped', [3661, 3634]],
		[[3636, 3642], 'valid'],
		[[3643, 3646], 'disallowed'],
		[[3647, 3647], 'valid', [], 'NV8'],
		[[3648, 3662], 'valid'],
		[[3663, 3663], 'valid', [], 'NV8'],
		[[3664, 3673], 'valid'],
		[[3674, 3675], 'valid', [], 'NV8'],
		[[3676, 3712], 'disallowed'],
		[[3713, 3714], 'valid'],
		[[3715, 3715], 'disallowed'],
		[[3716, 3716], 'valid'],
		[[3717, 3718], 'disallowed'],
		[[3719, 3720], 'valid'],
		[[3721, 3721], 'disallowed'],
		[[3722, 3722], 'valid'],
		[[3723, 3724], 'disallowed'],
		[[3725, 3725], 'valid'],
		[[3726, 3731], 'disallowed'],
		[[3732, 3735], 'valid'],
		[[3736, 3736], 'disallowed'],
		[[3737, 3743], 'valid'],
		[[3744, 3744], 'disallowed'],
		[[3745, 3747], 'valid'],
		[[3748, 3748], 'disallowed'],
		[[3749, 3749], 'valid'],
		[[3750, 3750], 'disallowed'],
		[[3751, 3751], 'valid'],
		[[3752, 3753], 'disallowed'],
		[[3754, 3755], 'valid'],
		[[3756, 3756], 'disallowed'],
		[[3757, 3762], 'valid'],
		[[3763, 3763], 'mapped', [3789, 3762]],
		[[3764, 3769], 'valid'],
		[[3770, 3770], 'disallowed'],
		[[3771, 3773], 'valid'],
		[[3774, 3775], 'disallowed'],
		[[3776, 3780], 'valid'],
		[[3781, 3781], 'disallowed'],
		[[3782, 3782], 'valid'],
		[[3783, 3783], 'disallowed'],
		[[3784, 3789], 'valid'],
		[[3790, 3791], 'disallowed'],
		[[3792, 3801], 'valid'],
		[[3802, 3803], 'disallowed'],
		[[3804, 3804], 'mapped', [3755, 3737]],
		[[3805, 3805], 'mapped', [3755, 3745]],
		[[3806, 3807], 'valid'],
		[[3808, 3839], 'disallowed'],
		[[3840, 3840], 'valid'],
		[[3841, 3850], 'valid', [], 'NV8'],
		[[3851, 3851], 'valid'],
		[[3852, 3852], 'mapped', [3851]],
		[[3853, 3863], 'valid', [], 'NV8'],
		[[3864, 3865], 'valid'],
		[[3866, 3871], 'valid', [], 'NV8'],
		[[3872, 3881], 'valid'],
		[[3882, 3892], 'valid', [], 'NV8'],
		[[3893, 3893], 'valid'],
		[[3894, 3894], 'valid', [], 'NV8'],
		[[3895, 3895], 'valid'],
		[[3896, 3896], 'valid', [], 'NV8'],
		[[3897, 3897], 'valid'],
		[[3898, 3901], 'valid', [], 'NV8'],
		[[3902, 3906], 'valid'],
		[[3907, 3907], 'mapped', [3906, 4023]],
		[[3908, 3911], 'valid'],
		[[3912, 3912], 'disallowed'],
		[[3913, 3916], 'valid'],
		[[3917, 3917], 'mapped', [3916, 4023]],
		[[3918, 3921], 'valid'],
		[[3922, 3922], 'mapped', [3921, 4023]],
		[[3923, 3926], 'valid'],
		[[3927, 3927], 'mapped', [3926, 4023]],
		[[3928, 3931], 'valid'],
		[[3932, 3932], 'mapped', [3931, 4023]],
		[[3933, 3944], 'valid'],
		[[3945, 3945], 'mapped', [3904, 4021]],
		[[3946, 3946], 'valid'],
		[[3947, 3948], 'valid'],
		[[3949, 3952], 'disallowed'],
		[[3953, 3954], 'valid'],
		[[3955, 3955], 'mapped', [3953, 3954]],
		[[3956, 3956], 'valid'],
		[[3957, 3957], 'mapped', [3953, 3956]],
		[[3958, 3958], 'mapped', [4018, 3968]],
		[[3959, 3959], 'mapped', [4018, 3953, 3968]],
		[[3960, 3960], 'mapped', [4019, 3968]],
		[[3961, 3961], 'mapped', [4019, 3953, 3968]],
		[[3962, 3968], 'valid'],
		[[3969, 3969], 'mapped', [3953, 3968]],
		[[3970, 3972], 'valid'],
		[[3973, 3973], 'valid', [], 'NV8'],
		[[3974, 3979], 'valid'],
		[[3980, 3983], 'valid'],
		[[3984, 3986], 'valid'],
		[[3987, 3987], 'mapped', [3986, 4023]],
		[[3988, 3989], 'valid'],
		[[3990, 3990], 'valid'],
		[[3991, 3991], 'valid'],
		[[3992, 3992], 'disallowed'],
		[[3993, 3996], 'valid'],
		[[3997, 3997], 'mapped', [3996, 4023]],
		[[3998, 4001], 'valid'],
		[[4002, 4002], 'mapped', [4001, 4023]],
		[[4003, 4006], 'valid'],
		[[4007, 4007], 'mapped', [4006, 4023]],
		[[4008, 4011], 'valid'],
		[[4012, 4012], 'mapped', [4011, 4023]],
		[[4013, 4013], 'valid'],
		[[4014, 4016], 'valid'],
		[[4017, 4023], 'valid'],
		[[4024, 4024], 'valid'],
		[[4025, 4025], 'mapped', [3984, 4021]],
		[[4026, 4028], 'valid'],
		[[4029, 4029], 'disallowed'],
		[[4030, 4037], 'valid', [], 'NV8'],
		[[4038, 4038], 'valid'],
		[[4039, 4044], 'valid', [], 'NV8'],
		[[4045, 4045], 'disallowed'],
		[[4046, 4046], 'valid', [], 'NV8'],
		[[4047, 4047], 'valid', [], 'NV8'],
		[[4048, 4049], 'valid', [], 'NV8'],
		[[4050, 4052], 'valid', [], 'NV8'],
		[[4053, 4056], 'valid', [], 'NV8'],
		[[4057, 4058], 'valid', [], 'NV8'],
		[[4059, 4095], 'disallowed'],
		[[4096, 4129], 'valid'],
		[[4130, 4130], 'valid'],
		[[4131, 4135], 'valid'],
		[[4136, 4136], 'valid'],
		[[4137, 4138], 'valid'],
		[[4139, 4139], 'valid'],
		[[4140, 4146], 'valid'],
		[[4147, 4149], 'valid'],
		[[4150, 4153], 'valid'],
		[[4154, 4159], 'valid'],
		[[4160, 4169], 'valid'],
		[[4170, 4175], 'valid', [], 'NV8'],
		[[4176, 4185], 'valid'],
		[[4186, 4249], 'valid'],
		[[4250, 4253], 'valid'],
		[[4254, 4255], 'valid', [], 'NV8'],
		[[4256, 4293], 'disallowed'],
		[[4294, 4294], 'disallowed'],
		[[4295, 4295], 'mapped', [11559]],
		[[4296, 4300], 'disallowed'],
		[[4301, 4301], 'mapped', [11565]],
		[[4302, 4303], 'disallowed'],
		[[4304, 4342], 'valid'],
		[[4343, 4344], 'valid'],
		[[4345, 4346], 'valid'],
		[[4347, 4347], 'valid', [], 'NV8'],
		[[4348, 4348], 'mapped', [4316]],
		[[4349, 4351], 'valid'],
		[[4352, 4441], 'valid', [], 'NV8'],
		[[4442, 4446], 'valid', [], 'NV8'],
		[[4447, 4448], 'disallowed'],
		[[4449, 4514], 'valid', [], 'NV8'],
		[[4515, 4519], 'valid', [], 'NV8'],
		[[4520, 4601], 'valid', [], 'NV8'],
		[[4602, 4607], 'valid', [], 'NV8'],
		[[4608, 4614], 'valid'],
		[[4615, 4615], 'valid'],
		[[4616, 4678], 'valid'],
		[[4679, 4679], 'valid'],
		[[4680, 4680], 'valid'],
		[[4681, 4681], 'disallowed'],
		[[4682, 4685], 'valid'],
		[[4686, 4687], 'disallowed'],
		[[4688, 4694], 'valid'],
		[[4695, 4695], 'disallowed'],
		[[4696, 4696], 'valid'],
		[[4697, 4697], 'disallowed'],
		[[4698, 4701], 'valid'],
		[[4702, 4703], 'disallowed'],
		[[4704, 4742], 'valid'],
		[[4743, 4743], 'valid'],
		[[4744, 4744], 'valid'],
		[[4745, 4745], 'disallowed'],
		[[4746, 4749], 'valid'],
		[[4750, 4751], 'disallowed'],
		[[4752, 4782], 'valid'],
		[[4783, 4783], 'valid'],
		[[4784, 4784], 'valid'],
		[[4785, 4785], 'disallowed'],
		[[4786, 4789], 'valid'],
		[[4790, 4791], 'disallowed'],
		[[4792, 4798], 'valid'],
		[[4799, 4799], 'disallowed'],
		[[4800, 4800], 'valid'],
		[[4801, 4801], 'disallowed'],
		[[4802, 4805], 'valid'],
		[[4806, 4807], 'disallowed'],
		[[4808, 4814], 'valid'],
		[[4815, 4815], 'valid'],
		[[4816, 4822], 'valid'],
		[[4823, 4823], 'disallowed'],
		[[4824, 4846], 'valid'],
		[[4847, 4847], 'valid'],
		[[4848, 4878], 'valid'],
		[[4879, 4879], 'valid'],
		[[4880, 4880], 'valid'],
		[[4881, 4881], 'disallowed'],
		[[4882, 4885], 'valid'],
		[[4886, 4887], 'disallowed'],
		[[4888, 4894], 'valid'],
		[[4895, 4895], 'valid'],
		[[4896, 4934], 'valid'],
		[[4935, 4935], 'valid'],
		[[4936, 4954], 'valid'],
		[[4955, 4956], 'disallowed'],
		[[4957, 4958], 'valid'],
		[[4959, 4959], 'valid'],
		[[4960, 4960], 'valid', [], 'NV8'],
		[[4961, 4988], 'valid', [], 'NV8'],
		[[4989, 4991], 'disallowed'],
		[[4992, 5007], 'valid'],
		[[5008, 5017], 'valid', [], 'NV8'],
		[[5018, 5023], 'disallowed'],
		[[5024, 5108], 'valid'],
		[[5109, 5109], 'valid'],
		[[5110, 5111], 'disallowed'],
		[[5112, 5112], 'mapped', [5104]],
		[[5113, 5113], 'mapped', [5105]],
		[[5114, 5114], 'mapped', [5106]],
		[[5115, 5115], 'mapped', [5107]],
		[[5116, 5116], 'mapped', [5108]],
		[[5117, 5117], 'mapped', [5109]],
		[[5118, 5119], 'disallowed'],
		[[5120, 5120], 'valid', [], 'NV8'],
		[[5121, 5740], 'valid'],
		[[5741, 5742], 'valid', [], 'NV8'],
		[[5743, 5750], 'valid'],
		[[5751, 5759], 'valid'],
		[[5760, 5760], 'disallowed'],
		[[5761, 5786], 'valid'],
		[[5787, 5788], 'valid', [], 'NV8'],
		[[5789, 5791], 'disallowed'],
		[[5792, 5866], 'valid'],
		[[5867, 5872], 'valid', [], 'NV8'],
		[[5873, 5880], 'valid'],
		[[5881, 5887], 'disallowed'],
		[[5888, 5900], 'valid'],
		[[5901, 5901], 'disallowed'],
		[[5902, 5908], 'valid'],
		[[5909, 5919], 'disallowed'],
		[[5920, 5940], 'valid'],
		[[5941, 5942], 'valid', [], 'NV8'],
		[[5943, 5951], 'disallowed'],
		[[5952, 5971], 'valid'],
		[[5972, 5983], 'disallowed'],
		[[5984, 5996], 'valid'],
		[[5997, 5997], 'disallowed'],
		[[5998, 6000], 'valid'],
		[[6001, 6001], 'disallowed'],
		[[6002, 6003], 'valid'],
		[[6004, 6015], 'disallowed'],
		[[6016, 6067], 'valid'],
		[[6068, 6069], 'disallowed'],
		[[6070, 6099], 'valid'],
		[[6100, 6102], 'valid', [], 'NV8'],
		[[6103, 6103], 'valid'],
		[[6104, 6107], 'valid', [], 'NV8'],
		[[6108, 6108], 'valid'],
		[[6109, 6109], 'valid'],
		[[6110, 6111], 'disallowed'],
		[[6112, 6121], 'valid'],
		[[6122, 6127], 'disallowed'],
		[[6128, 6137], 'valid', [], 'NV8'],
		[[6138, 6143], 'disallowed'],
		[[6144, 6149], 'valid', [], 'NV8'],
		[[6150, 6150], 'disallowed'],
		[[6151, 6154], 'valid', [], 'NV8'],
		[[6155, 6157], 'ignored'],
		[[6158, 6158], 'disallowed'],
		[[6159, 6159], 'disallowed'],
		[[6160, 6169], 'valid'],
		[[6170, 6175], 'disallowed'],
		[[6176, 6263], 'valid'],
		[[6264, 6271], 'disallowed'],
		[[6272, 6313], 'valid'],
		[[6314, 6314], 'valid'],
		[[6315, 6319], 'disallowed'],
		[[6320, 6389], 'valid'],
		[[6390, 6399], 'disallowed'],
		[[6400, 6428], 'valid'],
		[[6429, 6430], 'valid'],
		[[6431, 6431], 'disallowed'],
		[[6432, 6443], 'valid'],
		[[6444, 6447], 'disallowed'],
		[[6448, 6459], 'valid'],
		[[6460, 6463], 'disallowed'],
		[[6464, 6464], 'valid', [], 'NV8'],
		[[6465, 6467], 'disallowed'],
		[[6468, 6469], 'valid', [], 'NV8'],
		[[6470, 6509], 'valid'],
		[[6510, 6511], 'disallowed'],
		[[6512, 6516], 'valid'],
		[[6517, 6527], 'disallowed'],
		[[6528, 6569], 'valid'],
		[[6570, 6571], 'valid'],
		[[6572, 6575], 'disallowed'],
		[[6576, 6601], 'valid'],
		[[6602, 6607], 'disallowed'],
		[[6608, 6617], 'valid'],
		[[6618, 6618], 'valid', [], 'XV8'],
		[[6619, 6621], 'disallowed'],
		[[6622, 6623], 'valid', [], 'NV8'],
		[[6624, 6655], 'valid', [], 'NV8'],
		[[6656, 6683], 'valid'],
		[[6684, 6685], 'disallowed'],
		[[6686, 6687], 'valid', [], 'NV8'],
		[[6688, 6750], 'valid'],
		[[6751, 6751], 'disallowed'],
		[[6752, 6780], 'valid'],
		[[6781, 6782], 'disallowed'],
		[[6783, 6793], 'valid'],
		[[6794, 6799], 'disallowed'],
		[[6800, 6809], 'valid'],
		[[6810, 6815], 'disallowed'],
		[[6816, 6822], 'valid', [], 'NV8'],
		[[6823, 6823], 'valid'],
		[[6824, 6829], 'valid', [], 'NV8'],
		[[6830, 6831], 'disallowed'],
		[[6832, 6845], 'valid'],
		[[6846, 6846], 'valid', [], 'NV8'],
		[[6847, 6911], 'disallowed'],
		[[6912, 6987], 'valid'],
		[[6988, 6991], 'disallowed'],
		[[6992, 7001], 'valid'],
		[[7002, 7018], 'valid', [], 'NV8'],
		[[7019, 7027], 'valid'],
		[[7028, 7036], 'valid', [], 'NV8'],
		[[7037, 7039], 'disallowed'],
		[[7040, 7082], 'valid'],
		[[7083, 7085], 'valid'],
		[[7086, 7097], 'valid'],
		[[7098, 7103], 'valid'],
		[[7104, 7155], 'valid'],
		[[7156, 7163], 'disallowed'],
		[[7164, 7167], 'valid', [], 'NV8'],
		[[7168, 7223], 'valid'],
		[[7224, 7226], 'disallowed'],
		[[7227, 7231], 'valid', [], 'NV8'],
		[[7232, 7241], 'valid'],
		[[7242, 7244], 'disallowed'],
		[[7245, 7293], 'valid'],
		[[7294, 7295], 'valid', [], 'NV8'],
		[[7296, 7359], 'disallowed'],
		[[7360, 7367], 'valid', [], 'NV8'],
		[[7368, 7375], 'disallowed'],
		[[7376, 7378], 'valid'],
		[[7379, 7379], 'valid', [], 'NV8'],
		[[7380, 7410], 'valid'],
		[[7411, 7414], 'valid'],
		[[7415, 7415], 'disallowed'],
		[[7416, 7417], 'valid'],
		[[7418, 7423], 'disallowed'],
		[[7424, 7467], 'valid'],
		[[7468, 7468], 'mapped', [97]],
		[[7469, 7469], 'mapped', [230]],
		[[7470, 7470], 'mapped', [98]],
		[[7471, 7471], 'valid'],
		[[7472, 7472], 'mapped', [100]],
		[[7473, 7473], 'mapped', [101]],
		[[7474, 7474], 'mapped', [477]],
		[[7475, 7475], 'mapped', [103]],
		[[7476, 7476], 'mapped', [104]],
		[[7477, 7477], 'mapped', [105]],
		[[7478, 7478], 'mapped', [106]],
		[[7479, 7479], 'mapped', [107]],
		[[7480, 7480], 'mapped', [108]],
		[[7481, 7481], 'mapped', [109]],
		[[7482, 7482], 'mapped', [110]],
		[[7483, 7483], 'valid'],
		[[7484, 7484], 'mapped', [111]],
		[[7485, 7485], 'mapped', [547]],
		[[7486, 7486], 'mapped', [112]],
		[[7487, 7487], 'mapped', [114]],
		[[7488, 7488], 'mapped', [116]],
		[[7489, 7489], 'mapped', [117]],
		[[7490, 7490], 'mapped', [119]],
		[[7491, 7491], 'mapped', [97]],
		[[7492, 7492], 'mapped', [592]],
		[[7493, 7493], 'mapped', [593]],
		[[7494, 7494], 'mapped', [7426]],
		[[7495, 7495], 'mapped', [98]],
		[[7496, 7496], 'mapped', [100]],
		[[7497, 7497], 'mapped', [101]],
		[[7498, 7498], 'mapped', [601]],
		[[7499, 7499], 'mapped', [603]],
		[[7500, 7500], 'mapped', [604]],
		[[7501, 7501], 'mapped', [103]],
		[[7502, 7502], 'valid'],
		[[7503, 7503], 'mapped', [107]],
		[[7504, 7504], 'mapped', [109]],
		[[7505, 7505], 'mapped', [331]],
		[[7506, 7506], 'mapped', [111]],
		[[7507, 7507], 'mapped', [596]],
		[[7508, 7508], 'mapped', [7446]],
		[[7509, 7509], 'mapped', [7447]],
		[[7510, 7510], 'mapped', [112]],
		[[7511, 7511], 'mapped', [116]],
		[[7512, 7512], 'mapped', [117]],
		[[7513, 7513], 'mapped', [7453]],
		[[7514, 7514], 'mapped', [623]],
		[[7515, 7515], 'mapped', [118]],
		[[7516, 7516], 'mapped', [7461]],
		[[7517, 7517], 'mapped', [946]],
		[[7518, 7518], 'mapped', [947]],
		[[7519, 7519], 'mapped', [948]],
		[[7520, 7520], 'mapped', [966]],
		[[7521, 7521], 'mapped', [967]],
		[[7522, 7522], 'mapped', [105]],
		[[7523, 7523], 'mapped', [114]],
		[[7524, 7524], 'mapped', [117]],
		[[7525, 7525], 'mapped', [118]],
		[[7526, 7526], 'mapped', [946]],
		[[7527, 7527], 'mapped', [947]],
		[[7528, 7528], 'mapped', [961]],
		[[7529, 7529], 'mapped', [966]],
		[[7530, 7530], 'mapped', [967]],
		[[7531, 7531], 'valid'],
		[[7532, 7543], 'valid'],
		[[7544, 7544], 'mapped', [1085]],
		[[7545, 7578], 'valid'],
		[[7579, 7579], 'mapped', [594]],
		[[7580, 7580], 'mapped', [99]],
		[[7581, 7581], 'mapped', [597]],
		[[7582, 7582], 'mapped', [240]],
		[[7583, 7583], 'mapped', [604]],
		[[7584, 7584], 'mapped', [102]],
		[[7585, 7585], 'mapped', [607]],
		[[7586, 7586], 'mapped', [609]],
		[[7587, 7587], 'mapped', [613]],
		[[7588, 7588], 'mapped', [616]],
		[[7589, 7589], 'mapped', [617]],
		[[7590, 7590], 'mapped', [618]],
		[[7591, 7591], 'mapped', [7547]],
		[[7592, 7592], 'mapped', [669]],
		[[7593, 7593], 'mapped', [621]],
		[[7594, 7594], 'mapped', [7557]],
		[[7595, 7595], 'mapped', [671]],
		[[7596, 7596], 'mapped', [625]],
		[[7597, 7597], 'mapped', [624]],
		[[7598, 7598], 'mapped', [626]],
		[[7599, 7599], 'mapped', [627]],
		[[7600, 7600], 'mapped', [628]],
		[[7601, 7601], 'mapped', [629]],
		[[7602, 7602], 'mapped', [632]],
		[[7603, 7603], 'mapped', [642]],
		[[7604, 7604], 'mapped', [643]],
		[[7605, 7605], 'mapped', [427]],
		[[7606, 7606], 'mapped', [649]],
		[[7607, 7607], 'mapped', [650]],
		[[7608, 7608], 'mapped', [7452]],
		[[7609, 7609], 'mapped', [651]],
		[[7610, 7610], 'mapped', [652]],
		[[7611, 7611], 'mapped', [122]],
		[[7612, 7612], 'mapped', [656]],
		[[7613, 7613], 'mapped', [657]],
		[[7614, 7614], 'mapped', [658]],
		[[7615, 7615], 'mapped', [952]],
		[[7616, 7619], 'valid'],
		[[7620, 7626], 'valid'],
		[[7627, 7654], 'valid'],
		[[7655, 7669], 'valid'],
		[[7670, 7675], 'disallowed'],
		[[7676, 7676], 'valid'],
		[[7677, 7677], 'valid'],
		[[7678, 7679], 'valid'],
		[[7680, 7680], 'mapped', [7681]],
		[[7681, 7681], 'valid'],
		[[7682, 7682], 'mapped', [7683]],
		[[7683, 7683], 'valid'],
		[[7684, 7684], 'mapped', [7685]],
		[[7685, 7685], 'valid'],
		[[7686, 7686], 'mapped', [7687]],
		[[7687, 7687], 'valid'],
		[[7688, 7688], 'mapped', [7689]],
		[[7689, 7689], 'valid'],
		[[7690, 7690], 'mapped', [7691]],
		[[7691, 7691], 'valid'],
		[[7692, 7692], 'mapped', [7693]],
		[[7693, 7693], 'valid'],
		[[7694, 7694], 'mapped', [7695]],
		[[7695, 7695], 'valid'],
		[[7696, 7696], 'mapped', [7697]],
		[[7697, 7697], 'valid'],
		[[7698, 7698], 'mapped', [7699]],
		[[7699, 7699], 'valid'],
		[[7700, 7700], 'mapped', [7701]],
		[[7701, 7701], 'valid'],
		[[7702, 7702], 'mapped', [7703]],
		[[7703, 7703], 'valid'],
		[[7704, 7704], 'mapped', [7705]],
		[[7705, 7705], 'valid'],
		[[7706, 7706], 'mapped', [7707]],
		[[7707, 7707], 'valid'],
		[[7708, 7708], 'mapped', [7709]],
		[[7709, 7709], 'valid'],
		[[7710, 7710], 'mapped', [7711]],
		[[7711, 7711], 'valid'],
		[[7712, 7712], 'mapped', [7713]],
		[[7713, 7713], 'valid'],
		[[7714, 7714], 'mapped', [7715]],
		[[7715, 7715], 'valid'],
		[[7716, 7716], 'mapped', [7717]],
		[[7717, 7717], 'valid'],
		[[7718, 7718], 'mapped', [7719]],
		[[7719, 7719], 'valid'],
		[[7720, 7720], 'mapped', [7721]],
		[[7721, 7721], 'valid'],
		[[7722, 7722], 'mapped', [7723]],
		[[7723, 7723], 'valid'],
		[[7724, 7724], 'mapped', [7725]],
		[[7725, 7725], 'valid'],
		[[7726, 7726], 'mapped', [7727]],
		[[7727, 7727], 'valid'],
		[[7728, 7728], 'mapped', [7729]],
		[[7729, 7729], 'valid'],
		[[7730, 7730], 'mapped', [7731]],
		[[7731, 7731], 'valid'],
		[[7732, 7732], 'mapped', [7733]],
		[[7733, 7733], 'valid'],
		[[7734, 7734], 'mapped', [7735]],
		[[7735, 7735], 'valid'],
		[[7736, 7736], 'mapped', [7737]],
		[[7737, 7737], 'valid'],
		[[7738, 7738], 'mapped', [7739]],
		[[7739, 7739], 'valid'],
		[[7740, 7740], 'mapped', [7741]],
		[[7741, 7741], 'valid'],
		[[7742, 7742], 'mapped', [7743]],
		[[7743, 7743], 'valid'],
		[[7744, 7744], 'mapped', [7745]],
		[[7745, 7745], 'valid'],
		[[7746, 7746], 'mapped', [7747]],
		[[7747, 7747], 'valid'],
		[[7748, 7748], 'mapped', [7749]],
		[[7749, 7749], 'valid'],
		[[7750, 7750], 'mapped', [7751]],
		[[7751, 7751], 'valid'],
		[[7752, 7752], 'mapped', [7753]],
		[[7753, 7753], 'valid'],
		[[7754, 7754], 'mapped', [7755]],
		[[7755, 7755], 'valid'],
		[[7756, 7756], 'mapped', [7757]],
		[[7757, 7757], 'valid'],
		[[7758, 7758], 'mapped', [7759]],
		[[7759, 7759], 'valid'],
		[[7760, 7760], 'mapped', [7761]],
		[[7761, 7761], 'valid'],
		[[7762, 7762], 'mapped', [7763]],
		[[7763, 7763], 'valid'],
		[[7764, 7764], 'mapped', [7765]],
		[[7765, 7765], 'valid'],
		[[7766, 7766], 'mapped', [7767]],
		[[7767, 7767], 'valid'],
		[[7768, 7768], 'mapped', [7769]],
		[[7769, 7769], 'valid'],
		[[7770, 7770], 'mapped', [7771]],
		[[7771, 7771], 'valid'],
		[[7772, 7772], 'mapped', [7773]],
		[[7773, 7773], 'valid'],
		[[7774, 7774], 'mapped', [7775]],
		[[7775, 7775], 'valid'],
		[[7776, 7776], 'mapped', [7777]],
		[[7777, 7777], 'valid'],
		[[7778, 7778], 'mapped', [7779]],
		[[7779, 7779], 'valid'],
		[[7780, 7780], 'mapped', [7781]],
		[[7781, 7781], 'valid'],
		[[7782, 7782], 'mapped', [7783]],
		[[7783, 7783], 'valid'],
		[[7784, 7784], 'mapped', [7785]],
		[[7785, 7785], 'valid'],
		[[7786, 7786], 'mapped', [7787]],
		[[7787, 7787], 'valid'],
		[[7788, 7788], 'mapped', [7789]],
		[[7789, 7789], 'valid'],
		[[7790, 7790], 'mapped', [7791]],
		[[7791, 7791], 'valid'],
		[[7792, 7792], 'mapped', [7793]],
		[[7793, 7793], 'valid'],
		[[7794, 7794], 'mapped', [7795]],
		[[7795, 7795], 'valid'],
		[[7796, 7796], 'mapped', [7797]],
		[[7797, 7797], 'valid'],
		[[7798, 7798], 'mapped', [7799]],
		[[7799, 7799], 'valid'],
		[[7800, 7800], 'mapped', [7801]],
		[[7801, 7801], 'valid'],
		[[7802, 7802], 'mapped', [7803]],
		[[7803, 7803], 'valid'],
		[[7804, 7804], 'mapped', [7805]],
		[[7805, 7805], 'valid'],
		[[7806, 7806], 'mapped', [7807]],
		[[7807, 7807], 'valid'],
		[[7808, 7808], 'mapped', [7809]],
		[[7809, 7809], 'valid'],
		[[7810, 7810], 'mapped', [7811]],
		[[7811, 7811], 'valid'],
		[[7812, 7812], 'mapped', [7813]],
		[[7813, 7813], 'valid'],
		[[7814, 7814], 'mapped', [7815]],
		[[7815, 7815], 'valid'],
		[[7816, 7816], 'mapped', [7817]],
		[[7817, 7817], 'valid'],
		[[7818, 7818], 'mapped', [7819]],
		[[7819, 7819], 'valid'],
		[[7820, 7820], 'mapped', [7821]],
		[[7821, 7821], 'valid'],
		[[7822, 7822], 'mapped', [7823]],
		[[7823, 7823], 'valid'],
		[[7824, 7824], 'mapped', [7825]],
		[[7825, 7825], 'valid'],
		[[7826, 7826], 'mapped', [7827]],
		[[7827, 7827], 'valid'],
		[[7828, 7828], 'mapped', [7829]],
		[[7829, 7833], 'valid'],
		[[7834, 7834], 'mapped', [97, 702]],
		[[7835, 7835], 'mapped', [7777]],
		[[7836, 7837], 'valid'],
		[[7838, 7838], 'mapped', [115, 115]],
		[[7839, 7839], 'valid'],
		[[7840, 7840], 'mapped', [7841]],
		[[7841, 7841], 'valid'],
		[[7842, 7842], 'mapped', [7843]],
		[[7843, 7843], 'valid'],
		[[7844, 7844], 'mapped', [7845]],
		[[7845, 7845], 'valid'],
		[[7846, 7846], 'mapped', [7847]],
		[[7847, 7847], 'valid'],
		[[7848, 7848], 'mapped', [7849]],
		[[7849, 7849], 'valid'],
		[[7850, 7850], 'mapped', [7851]],
		[[7851, 7851], 'valid'],
		[[7852, 7852], 'mapped', [7853]],
		[[7853, 7853], 'valid'],
		[[7854, 7854], 'mapped', [7855]],
		[[7855, 7855], 'valid'],
		[[7856, 7856], 'mapped', [7857]],
		[[7857, 7857], 'valid'],
		[[7858, 7858], 'mapped', [7859]],
		[[7859, 7859], 'valid'],
		[[7860, 7860], 'mapped', [7861]],
		[[7861, 7861], 'valid'],
		[[7862, 7862], 'mapped', [7863]],
		[[7863, 7863], 'valid'],
		[[7864, 7864], 'mapped', [7865]],
		[[7865, 7865], 'valid'],
		[[7866, 7866], 'mapped', [7867]],
		[[7867, 7867], 'valid'],
		[[7868, 7868], 'mapped', [7869]],
		[[7869, 7869], 'valid'],
		[[7870, 7870], 'mapped', [7871]],
		[[7871, 7871], 'valid'],
		[[7872, 7872], 'mapped', [7873]],
		[[7873, 7873], 'valid'],
		[[7874, 7874], 'mapped', [7875]],
		[[7875, 7875], 'valid'],
		[[7876, 7876], 'mapped', [7877]],
		[[7877, 7877], 'valid'],
		[[7878, 7878], 'mapped', [7879]],
		[[7879, 7879], 'valid'],
		[[7880, 7880], 'mapped', [7881]],
		[[7881, 7881], 'valid'],
		[[7882, 7882], 'mapped', [7883]],
		[[7883, 7883], 'valid'],
		[[7884, 7884], 'mapped', [7885]],
		[[7885, 7885], 'valid'],
		[[7886, 7886], 'mapped', [7887]],
		[[7887, 7887], 'valid'],
		[[7888, 7888], 'mapped', [7889]],
		[[7889, 7889], 'valid'],
		[[7890, 7890], 'mapped', [7891]],
		[[7891, 7891], 'valid'],
		[[7892, 7892], 'mapped', [7893]],
		[[7893, 7893], 'valid'],
		[[7894, 7894], 'mapped', [7895]],
		[[7895, 7895], 'valid'],
		[[7896, 7896], 'mapped', [7897]],
		[[7897, 7897], 'valid'],
		[[7898, 7898], 'mapped', [7899]],
		[[7899, 7899], 'valid'],
		[[7900, 7900], 'mapped', [7901]],
		[[7901, 7901], 'valid'],
		[[7902, 7902], 'mapped', [7903]],
		[[7903, 7903], 'valid'],
		[[7904, 7904], 'mapped', [7905]],
		[[7905, 7905], 'valid'],
		[[7906, 7906], 'mapped', [7907]],
		[[7907, 7907], 'valid'],
		[[7908, 7908], 'mapped', [7909]],
		[[7909, 7909], 'valid'],
		[[7910, 7910], 'mapped', [7911]],
		[[7911, 7911], 'valid'],
		[[7912, 7912], 'mapped', [7913]],
		[[7913, 7913], 'valid'],
		[[7914, 7914], 'mapped', [7915]],
		[[7915, 7915], 'valid'],
		[[7916, 7916], 'mapped', [7917]],
		[[7917, 7917], 'valid'],
		[[7918, 7918], 'mapped', [7919]],
		[[7919, 7919], 'valid'],
		[[7920, 7920], 'mapped', [7921]],
		[[7921, 7921], 'valid'],
		[[7922, 7922], 'mapped', [7923]],
		[[7923, 7923], 'valid'],
		[[7924, 7924], 'mapped', [7925]],
		[[7925, 7925], 'valid'],
		[[7926, 7926], 'mapped', [7927]],
		[[7927, 7927], 'valid'],
		[[7928, 7928], 'mapped', [7929]],
		[[7929, 7929], 'valid'],
		[[7930, 7930], 'mapped', [7931]],
		[[7931, 7931], 'valid'],
		[[7932, 7932], 'mapped', [7933]],
		[[7933, 7933], 'valid'],
		[[7934, 7934], 'mapped', [7935]],
		[[7935, 7935], 'valid'],
		[[7936, 7943], 'valid'],
		[[7944, 7944], 'mapped', [7936]],
		[[7945, 7945], 'mapped', [7937]],
		[[7946, 7946], 'mapped', [7938]],
		[[7947, 7947], 'mapped', [7939]],
		[[7948, 7948], 'mapped', [7940]],
		[[7949, 7949], 'mapped', [7941]],
		[[7950, 7950], 'mapped', [7942]],
		[[7951, 7951], 'mapped', [7943]],
		[[7952, 7957], 'valid'],
		[[7958, 7959], 'disallowed'],
		[[7960, 7960], 'mapped', [7952]],
		[[7961, 7961], 'mapped', [7953]],
		[[7962, 7962], 'mapped', [7954]],
		[[7963, 7963], 'mapped', [7955]],
		[[7964, 7964], 'mapped', [7956]],
		[[7965, 7965], 'mapped', [7957]],
		[[7966, 7967], 'disallowed'],
		[[7968, 7975], 'valid'],
		[[7976, 7976], 'mapped', [7968]],
		[[7977, 7977], 'mapped', [7969]],
		[[7978, 7978], 'mapped', [7970]],
		[[7979, 7979], 'mapped', [7971]],
		[[7980, 7980], 'mapped', [7972]],
		[[7981, 7981], 'mapped', [7973]],
		[[7982, 7982], 'mapped', [7974]],
		[[7983, 7983], 'mapped', [7975]],
		[[7984, 7991], 'valid'],
		[[7992, 7992], 'mapped', [7984]],
		[[7993, 7993], 'mapped', [7985]],
		[[7994, 7994], 'mapped', [7986]],
		[[7995, 7995], 'mapped', [7987]],
		[[7996, 7996], 'mapped', [7988]],
		[[7997, 7997], 'mapped', [7989]],
		[[7998, 7998], 'mapped', [7990]],
		[[7999, 7999], 'mapped', [7991]],
		[[8000, 8005], 'valid'],
		[[8006, 8007], 'disallowed'],
		[[8008, 8008], 'mapped', [8000]],
		[[8009, 8009], 'mapped', [8001]],
		[[8010, 8010], 'mapped', [8002]],
		[[8011, 8011], 'mapped', [8003]],
		[[8012, 8012], 'mapped', [8004]],
		[[8013, 8013], 'mapped', [8005]],
		[[8014, 8015], 'disallowed'],
		[[8016, 8023], 'valid'],
		[[8024, 8024], 'disallowed'],
		[[8025, 8025], 'mapped', [8017]],
		[[8026, 8026], 'disallowed'],
		[[8027, 8027], 'mapped', [8019]],
		[[8028, 8028], 'disallowed'],
		[[8029, 8029], 'mapped', [8021]],
		[[8030, 8030], 'disallowed'],
		[[8031, 8031], 'mapped', [8023]],
		[[8032, 8039], 'valid'],
		[[8040, 8040], 'mapped', [8032]],
		[[8041, 8041], 'mapped', [8033]],
		[[8042, 8042], 'mapped', [8034]],
		[[8043, 8043], 'mapped', [8035]],
		[[8044, 8044], 'mapped', [8036]],
		[[8045, 8045], 'mapped', [8037]],
		[[8046, 8046], 'mapped', [8038]],
		[[8047, 8047], 'mapped', [8039]],
		[[8048, 8048], 'valid'],
		[[8049, 8049], 'mapped', [940]],
		[[8050, 8050], 'valid'],
		[[8051, 8051], 'mapped', [941]],
		[[8052, 8052], 'valid'],
		[[8053, 8053], 'mapped', [942]],
		[[8054, 8054], 'valid'],
		[[8055, 8055], 'mapped', [943]],
		[[8056, 8056], 'valid'],
		[[8057, 8057], 'mapped', [972]],
		[[8058, 8058], 'valid'],
		[[8059, 8059], 'mapped', [973]],
		[[8060, 8060], 'valid'],
		[[8061, 8061], 'mapped', [974]],
		[[8062, 8063], 'disallowed'],
		[[8064, 8064], 'mapped', [7936, 953]],
		[[8065, 8065], 'mapped', [7937, 953]],
		[[8066, 8066], 'mapped', [7938, 953]],
		[[8067, 8067], 'mapped', [7939, 953]],
		[[8068, 8068], 'mapped', [7940, 953]],
		[[8069, 8069], 'mapped', [7941, 953]],
		[[8070, 8070], 'mapped', [7942, 953]],
		[[8071, 8071], 'mapped', [7943, 953]],
		[[8072, 8072], 'mapped', [7936, 953]],
		[[8073, 8073], 'mapped', [7937, 953]],
		[[8074, 8074], 'mapped', [7938, 953]],
		[[8075, 8075], 'mapped', [7939, 953]],
		[[8076, 8076], 'mapped', [7940, 953]],
		[[8077, 8077], 'mapped', [7941, 953]],
		[[8078, 8078], 'mapped', [7942, 953]],
		[[8079, 8079], 'mapped', [7943, 953]],
		[[8080, 8080], 'mapped', [7968, 953]],
		[[8081, 8081], 'mapped', [7969, 953]],
		[[8082, 8082], 'mapped', [7970, 953]],
		[[8083, 8083], 'mapped', [7971, 953]],
		[[8084, 8084], 'mapped', [7972, 953]],
		[[8085, 8085], 'mapped', [7973, 953]],
		[[8086, 8086], 'mapped', [7974, 953]],
		[[8087, 8087], 'mapped', [7975, 953]],
		[[8088, 8088], 'mapped', [7968, 953]],
		[[8089, 8089], 'mapped', [7969, 953]],
		[[8090, 8090], 'mapped', [7970, 953]],
		[[8091, 8091], 'mapped', [7971, 953]],
		[[8092, 8092], 'mapped', [7972, 953]],
		[[8093, 8093], 'mapped', [7973, 953]],
		[[8094, 8094], 'mapped', [7974, 953]],
		[[8095, 8095], 'mapped', [7975, 953]],
		[[8096, 8096], 'mapped', [8032, 953]],
		[[8097, 8097], 'mapped', [8033, 953]],
		[[8098, 8098], 'mapped', [8034, 953]],
		[[8099, 8099], 'mapped', [8035, 953]],
		[[8100, 8100], 'mapped', [8036, 953]],
		[[8101, 8101], 'mapped', [8037, 953]],
		[[8102, 8102], 'mapped', [8038, 953]],
		[[8103, 8103], 'mapped', [8039, 953]],
		[[8104, 8104], 'mapped', [8032, 953]],
		[[8105, 8105], 'mapped', [8033, 953]],
		[[8106, 8106], 'mapped', [8034, 953]],
		[[8107, 8107], 'mapped', [8035, 953]],
		[[8108, 8108], 'mapped', [8036, 953]],
		[[8109, 8109], 'mapped', [8037, 953]],
		[[8110, 8110], 'mapped', [8038, 953]],
		[[8111, 8111], 'mapped', [8039, 953]],
		[[8112, 8113], 'valid'],
		[[8114, 8114], 'mapped', [8048, 953]],
		[[8115, 8115], 'mapped', [945, 953]],
		[[8116, 8116], 'mapped', [940, 953]],
		[[8117, 8117], 'disallowed'],
		[[8118, 8118], 'valid'],
		[[8119, 8119], 'mapped', [8118, 953]],
		[[8120, 8120], 'mapped', [8112]],
		[[8121, 8121], 'mapped', [8113]],
		[[8122, 8122], 'mapped', [8048]],
		[[8123, 8123], 'mapped', [940]],
		[[8124, 8124], 'mapped', [945, 953]],
		[[8125, 8125], 'disallowed_STD3_mapped', [32, 787]],
		[[8126, 8126], 'mapped', [953]],
		[[8127, 8127], 'disallowed_STD3_mapped', [32, 787]],
		[[8128, 8128], 'disallowed_STD3_mapped', [32, 834]],
		[[8129, 8129], 'disallowed_STD3_mapped', [32, 776, 834]],
		[[8130, 8130], 'mapped', [8052, 953]],
		[[8131, 8131], 'mapped', [951, 953]],
		[[8132, 8132], 'mapped', [942, 953]],
		[[8133, 8133], 'disallowed'],
		[[8134, 8134], 'valid'],
		[[8135, 8135], 'mapped', [8134, 953]],
		[[8136, 8136], 'mapped', [8050]],
		[[8137, 8137], 'mapped', [941]],
		[[8138, 8138], 'mapped', [8052]],
		[[8139, 8139], 'mapped', [942]],
		[[8140, 8140], 'mapped', [951, 953]],
		[[8141, 8141], 'disallowed_STD3_mapped', [32, 787, 768]],
		[[8142, 8142], 'disallowed_STD3_mapped', [32, 787, 769]],
		[[8143, 8143], 'disallowed_STD3_mapped', [32, 787, 834]],
		[[8144, 8146], 'valid'],
		[[8147, 8147], 'mapped', [912]],
		[[8148, 8149], 'disallowed'],
		[[8150, 8151], 'valid'],
		[[8152, 8152], 'mapped', [8144]],
		[[8153, 8153], 'mapped', [8145]],
		[[8154, 8154], 'mapped', [8054]],
		[[8155, 8155], 'mapped', [943]],
		[[8156, 8156], 'disallowed'],
		[[8157, 8157], 'disallowed_STD3_mapped', [32, 788, 768]],
		[[8158, 8158], 'disallowed_STD3_mapped', [32, 788, 769]],
		[[8159, 8159], 'disallowed_STD3_mapped', [32, 788, 834]],
		[[8160, 8162], 'valid'],
		[[8163, 8163], 'mapped', [944]],
		[[8164, 8167], 'valid'],
		[[8168, 8168], 'mapped', [8160]],
		[[8169, 8169], 'mapped', [8161]],
		[[8170, 8170], 'mapped', [8058]],
		[[8171, 8171], 'mapped', [973]],
		[[8172, 8172], 'mapped', [8165]],
		[[8173, 8173], 'disallowed_STD3_mapped', [32, 776, 768]],
		[[8174, 8174], 'disallowed_STD3_mapped', [32, 776, 769]],
		[[8175, 8175], 'disallowed_STD3_mapped', [96]],
		[[8176, 8177], 'disallowed'],
		[[8178, 8178], 'mapped', [8060, 953]],
		[[8179, 8179], 'mapped', [969, 953]],
		[[8180, 8180], 'mapped', [974, 953]],
		[[8181, 8181], 'disallowed'],
		[[8182, 8182], 'valid'],
		[[8183, 8183], 'mapped', [8182, 953]],
		[[8184, 8184], 'mapped', [8056]],
		[[8185, 8185], 'mapped', [972]],
		[[8186, 8186], 'mapped', [8060]],
		[[8187, 8187], 'mapped', [974]],
		[[8188, 8188], 'mapped', [969, 953]],
		[[8189, 8189], 'disallowed_STD3_mapped', [32, 769]],
		[[8190, 8190], 'disallowed_STD3_mapped', [32, 788]],
		[[8191, 8191], 'disallowed'],
		[[8192, 8202], 'disallowed_STD3_mapped', [32]],
		[[8203, 8203], 'ignored'],
		[[8204, 8205], 'deviation', []],
		[[8206, 8207], 'disallowed'],
		[[8208, 8208], 'valid', [], 'NV8'],
		[[8209, 8209], 'mapped', [8208]],
		[[8210, 8214], 'valid', [], 'NV8'],
		[[8215, 8215], 'disallowed_STD3_mapped', [32, 819]],
		[[8216, 8227], 'valid', [], 'NV8'],
		[[8228, 8230], 'disallowed'],
		[[8231, 8231], 'valid', [], 'NV8'],
		[[8232, 8238], 'disallowed'],
		[[8239, 8239], 'disallowed_STD3_mapped', [32]],
		[[8240, 8242], 'valid', [], 'NV8'],
		[[8243, 8243], 'mapped', [8242, 8242]],
		[[8244, 8244], 'mapped', [8242, 8242, 8242]],
		[[8245, 8245], 'valid', [], 'NV8'],
		[[8246, 8246], 'mapped', [8245, 8245]],
		[[8247, 8247], 'mapped', [8245, 8245, 8245]],
		[[8248, 8251], 'valid', [], 'NV8'],
		[[8252, 8252], 'disallowed_STD3_mapped', [33, 33]],
		[[8253, 8253], 'valid', [], 'NV8'],
		[[8254, 8254], 'disallowed_STD3_mapped', [32, 773]],
		[[8255, 8262], 'valid', [], 'NV8'],
		[[8263, 8263], 'disallowed_STD3_mapped', [63, 63]],
		[[8264, 8264], 'disallowed_STD3_mapped', [63, 33]],
		[[8265, 8265], 'disallowed_STD3_mapped', [33, 63]],
		[[8266, 8269], 'valid', [], 'NV8'],
		[[8270, 8274], 'valid', [], 'NV8'],
		[[8275, 8276], 'valid', [], 'NV8'],
		[[8277, 8278], 'valid', [], 'NV8'],
		[[8279, 8279], 'mapped', [8242, 8242, 8242, 8242]],
		[[8280, 8286], 'valid', [], 'NV8'],
		[[8287, 8287], 'disallowed_STD3_mapped', [32]],
		[[8288, 8288], 'ignored'],
		[[8289, 8291], 'disallowed'],
		[[8292, 8292], 'ignored'],
		[[8293, 8293], 'disallowed'],
		[[8294, 8297], 'disallowed'],
		[[8298, 8303], 'disallowed'],
		[[8304, 8304], 'mapped', [48]],
		[[8305, 8305], 'mapped', [105]],
		[[8306, 8307], 'disallowed'],
		[[8308, 8308], 'mapped', [52]],
		[[8309, 8309], 'mapped', [53]],
		[[8310, 8310], 'mapped', [54]],
		[[8311, 8311], 'mapped', [55]],
		[[8312, 8312], 'mapped', [56]],
		[[8313, 8313], 'mapped', [57]],
		[[8314, 8314], 'disallowed_STD3_mapped', [43]],
		[[8315, 8315], 'mapped', [8722]],
		[[8316, 8316], 'disallowed_STD3_mapped', [61]],
		[[8317, 8317], 'disallowed_STD3_mapped', [40]],
		[[8318, 8318], 'disallowed_STD3_mapped', [41]],
		[[8319, 8319], 'mapped', [110]],
		[[8320, 8320], 'mapped', [48]],
		[[8321, 8321], 'mapped', [49]],
		[[8322, 8322], 'mapped', [50]],
		[[8323, 8323], 'mapped', [51]],
		[[8324, 8324], 'mapped', [52]],
		[[8325, 8325], 'mapped', [53]],
		[[8326, 8326], 'mapped', [54]],
		[[8327, 8327], 'mapped', [55]],
		[[8328, 8328], 'mapped', [56]],
		[[8329, 8329], 'mapped', [57]],
		[[8330, 8330], 'disallowed_STD3_mapped', [43]],
		[[8331, 8331], 'mapped', [8722]],
		[[8332, 8332], 'disallowed_STD3_mapped', [61]],
		[[8333, 8333], 'disallowed_STD3_mapped', [40]],
		[[8334, 8334], 'disallowed_STD3_mapped', [41]],
		[[8335, 8335], 'disallowed'],
		[[8336, 8336], 'mapped', [97]],
		[[8337, 8337], 'mapped', [101]],
		[[8338, 8338], 'mapped', [111]],
		[[8339, 8339], 'mapped', [120]],
		[[8340, 8340], 'mapped', [601]],
		[[8341, 8341], 'mapped', [104]],
		[[8342, 8342], 'mapped', [107]],
		[[8343, 8343], 'mapped', [108]],
		[[8344, 8344], 'mapped', [109]],
		[[8345, 8345], 'mapped', [110]],
		[[8346, 8346], 'mapped', [112]],
		[[8347, 8347], 'mapped', [115]],
		[[8348, 8348], 'mapped', [116]],
		[[8349, 8351], 'disallowed'],
		[[8352, 8359], 'valid', [], 'NV8'],
		[[8360, 8360], 'mapped', [114, 115]],
		[[8361, 8362], 'valid', [], 'NV8'],
		[[8363, 8363], 'valid', [], 'NV8'],
		[[8364, 8364], 'valid', [], 'NV8'],
		[[8365, 8367], 'valid', [], 'NV8'],
		[[8368, 8369], 'valid', [], 'NV8'],
		[[8370, 8373], 'valid', [], 'NV8'],
		[[8374, 8376], 'valid', [], 'NV8'],
		[[8377, 8377], 'valid', [], 'NV8'],
		[[8378, 8378], 'valid', [], 'NV8'],
		[[8379, 8381], 'valid', [], 'NV8'],
		[[8382, 8382], 'valid', [], 'NV8'],
		[[8383, 8399], 'disallowed'],
		[[8400, 8417], 'valid', [], 'NV8'],
		[[8418, 8419], 'valid', [], 'NV8'],
		[[8420, 8426], 'valid', [], 'NV8'],
		[[8427, 8427], 'valid', [], 'NV8'],
		[[8428, 8431], 'valid', [], 'NV8'],
		[[8432, 8432], 'valid', [], 'NV8'],
		[[8433, 8447], 'disallowed'],
		[[8448, 8448], 'disallowed_STD3_mapped', [97, 47, 99]],
		[[8449, 8449], 'disallowed_STD3_mapped', [97, 47, 115]],
		[[8450, 8450], 'mapped', [99]],
		[[8451, 8451], 'mapped', [176, 99]],
		[[8452, 8452], 'valid', [], 'NV8'],
		[[8453, 8453], 'disallowed_STD3_mapped', [99, 47, 111]],
		[[8454, 8454], 'disallowed_STD3_mapped', [99, 47, 117]],
		[[8455, 8455], 'mapped', [603]],
		[[8456, 8456], 'valid', [], 'NV8'],
		[[8457, 8457], 'mapped', [176, 102]],
		[[8458, 8458], 'mapped', [103]],
		[[8459, 8462], 'mapped', [104]],
		[[8463, 8463], 'mapped', [295]],
		[[8464, 8465], 'mapped', [105]],
		[[8466, 8467], 'mapped', [108]],
		[[8468, 8468], 'valid', [], 'NV8'],
		[[8469, 8469], 'mapped', [110]],
		[[8470, 8470], 'mapped', [110, 111]],
		[[8471, 8472], 'valid', [], 'NV8'],
		[[8473, 8473], 'mapped', [112]],
		[[8474, 8474], 'mapped', [113]],
		[[8475, 8477], 'mapped', [114]],
		[[8478, 8479], 'valid', [], 'NV8'],
		[[8480, 8480], 'mapped', [115, 109]],
		[[8481, 8481], 'mapped', [116, 101, 108]],
		[[8482, 8482], 'mapped', [116, 109]],
		[[8483, 8483], 'valid', [], 'NV8'],
		[[8484, 8484], 'mapped', [122]],
		[[8485, 8485], 'valid', [], 'NV8'],
		[[8486, 8486], 'mapped', [969]],
		[[8487, 8487], 'valid', [], 'NV8'],
		[[8488, 8488], 'mapped', [122]],
		[[8489, 8489], 'valid', [], 'NV8'],
		[[8490, 8490], 'mapped', [107]],
		[[8491, 8491], 'mapped', [229]],
		[[8492, 8492], 'mapped', [98]],
		[[8493, 8493], 'mapped', [99]],
		[[8494, 8494], 'valid', [], 'NV8'],
		[[8495, 8496], 'mapped', [101]],
		[[8497, 8497], 'mapped', [102]],
		[[8498, 8498], 'disallowed'],
		[[8499, 8499], 'mapped', [109]],
		[[8500, 8500], 'mapped', [111]],
		[[8501, 8501], 'mapped', [1488]],
		[[8502, 8502], 'mapped', [1489]],
		[[8503, 8503], 'mapped', [1490]],
		[[8504, 8504], 'mapped', [1491]],
		[[8505, 8505], 'mapped', [105]],
		[[8506, 8506], 'valid', [], 'NV8'],
		[[8507, 8507], 'mapped', [102, 97, 120]],
		[[8508, 8508], 'mapped', [960]],
		[[8509, 8510], 'mapped', [947]],
		[[8511, 8511], 'mapped', [960]],
		[[8512, 8512], 'mapped', [8721]],
		[[8513, 8516], 'valid', [], 'NV8'],
		[[8517, 8518], 'mapped', [100]],
		[[8519, 8519], 'mapped', [101]],
		[[8520, 8520], 'mapped', [105]],
		[[8521, 8521], 'mapped', [106]],
		[[8522, 8523], 'valid', [], 'NV8'],
		[[8524, 8524], 'valid', [], 'NV8'],
		[[8525, 8525], 'valid', [], 'NV8'],
		[[8526, 8526], 'valid'],
		[[8527, 8527], 'valid', [], 'NV8'],
		[[8528, 8528], 'mapped', [49, 8260, 55]],
		[[8529, 8529], 'mapped', [49, 8260, 57]],
		[[8530, 8530], 'mapped', [49, 8260, 49, 48]],
		[[8531, 8531], 'mapped', [49, 8260, 51]],
		[[8532, 8532], 'mapped', [50, 8260, 51]],
		[[8533, 8533], 'mapped', [49, 8260, 53]],
		[[8534, 8534], 'mapped', [50, 8260, 53]],
		[[8535, 8535], 'mapped', [51, 8260, 53]],
		[[8536, 8536], 'mapped', [52, 8260, 53]],
		[[8537, 8537], 'mapped', [49, 8260, 54]],
		[[8538, 8538], 'mapped', [53, 8260, 54]],
		[[8539, 8539], 'mapped', [49, 8260, 56]],
		[[8540, 8540], 'mapped', [51, 8260, 56]],
		[[8541, 8541], 'mapped', [53, 8260, 56]],
		[[8542, 8542], 'mapped', [55, 8260, 56]],
		[[8543, 8543], 'mapped', [49, 8260]],
		[[8544, 8544], 'mapped', [105]],
		[[8545, 8545], 'mapped', [105, 105]],
		[[8546, 8546], 'mapped', [105, 105, 105]],
		[[8547, 8547], 'mapped', [105, 118]],
		[[8548, 8548], 'mapped', [118]],
		[[8549, 8549], 'mapped', [118, 105]],
		[[8550, 8550], 'mapped', [118, 105, 105]],
		[[8551, 8551], 'mapped', [118, 105, 105, 105]],
		[[8552, 8552], 'mapped', [105, 120]],
		[[8553, 8553], 'mapped', [120]],
		[[8554, 8554], 'mapped', [120, 105]],
		[[8555, 8555], 'mapped', [120, 105, 105]],
		[[8556, 8556], 'mapped', [108]],
		[[8557, 8557], 'mapped', [99]],
		[[8558, 8558], 'mapped', [100]],
		[[8559, 8559], 'mapped', [109]],
		[[8560, 8560], 'mapped', [105]],
		[[8561, 8561], 'mapped', [105, 105]],
		[[8562, 8562], 'mapped', [105, 105, 105]],
		[[8563, 8563], 'mapped', [105, 118]],
		[[8564, 8564], 'mapped', [118]],
		[[8565, 8565], 'mapped', [118, 105]],
		[[8566, 8566], 'mapped', [118, 105, 105]],
		[[8567, 8567], 'mapped', [118, 105, 105, 105]],
		[[8568, 8568], 'mapped', [105, 120]],
		[[8569, 8569], 'mapped', [120]],
		[[8570, 8570], 'mapped', [120, 105]],
		[[8571, 8571], 'mapped', [120, 105, 105]],
		[[8572, 8572], 'mapped', [108]],
		[[8573, 8573], 'mapped', [99]],
		[[8574, 8574], 'mapped', [100]],
		[[8575, 8575], 'mapped', [109]],
		[[8576, 8578], 'valid', [], 'NV8'],
		[[8579, 8579], 'disallowed'],
		[[8580, 8580], 'valid'],
		[[8581, 8584], 'valid', [], 'NV8'],
		[[8585, 8585], 'mapped', [48, 8260, 51]],
		[[8586, 8587], 'valid', [], 'NV8'],
		[[8588, 8591], 'disallowed'],
		[[8592, 8682], 'valid', [], 'NV8'],
		[[8683, 8691], 'valid', [], 'NV8'],
		[[8692, 8703], 'valid', [], 'NV8'],
		[[8704, 8747], 'valid', [], 'NV8'],
		[[8748, 8748], 'mapped', [8747, 8747]],
		[[8749, 8749], 'mapped', [8747, 8747, 8747]],
		[[8750, 8750], 'valid', [], 'NV8'],
		[[8751, 8751], 'mapped', [8750, 8750]],
		[[8752, 8752], 'mapped', [8750, 8750, 8750]],
		[[8753, 8799], 'valid', [], 'NV8'],
		[[8800, 8800], 'disallowed_STD3_valid'],
		[[8801, 8813], 'valid', [], 'NV8'],
		[[8814, 8815], 'disallowed_STD3_valid'],
		[[8816, 8945], 'valid', [], 'NV8'],
		[[8946, 8959], 'valid', [], 'NV8'],
		[[8960, 8960], 'valid', [], 'NV8'],
		[[8961, 8961], 'valid', [], 'NV8'],
		[[8962, 9000], 'valid', [], 'NV8'],
		[[9001, 9001], 'mapped', [12296]],
		[[9002, 9002], 'mapped', [12297]],
		[[9003, 9082], 'valid', [], 'NV8'],
		[[9083, 9083], 'valid', [], 'NV8'],
		[[9084, 9084], 'valid', [], 'NV8'],
		[[9085, 9114], 'valid', [], 'NV8'],
		[[9115, 9166], 'valid', [], 'NV8'],
		[[9167, 9168], 'valid', [], 'NV8'],
		[[9169, 9179], 'valid', [], 'NV8'],
		[[9180, 9191], 'valid', [], 'NV8'],
		[[9192, 9192], 'valid', [], 'NV8'],
		[[9193, 9203], 'valid', [], 'NV8'],
		[[9204, 9210], 'valid', [], 'NV8'],
		[[9211, 9215], 'disallowed'],
		[[9216, 9252], 'valid', [], 'NV8'],
		[[9253, 9254], 'valid', [], 'NV8'],
		[[9255, 9279], 'disallowed'],
		[[9280, 9290], 'valid', [], 'NV8'],
		[[9291, 9311], 'disallowed'],
		[[9312, 9312], 'mapped', [49]],
		[[9313, 9313], 'mapped', [50]],
		[[9314, 9314], 'mapped', [51]],
		[[9315, 9315], 'mapped', [52]],
		[[9316, 9316], 'mapped', [53]],
		[[9317, 9317], 'mapped', [54]],
		[[9318, 9318], 'mapped', [55]],
		[[9319, 9319], 'mapped', [56]],
		[[9320, 9320], 'mapped', [57]],
		[[9321, 9321], 'mapped', [49, 48]],
		[[9322, 9322], 'mapped', [49, 49]],
		[[9323, 9323], 'mapped', [49, 50]],
		[[9324, 9324], 'mapped', [49, 51]],
		[[9325, 9325], 'mapped', [49, 52]],
		[[9326, 9326], 'mapped', [49, 53]],
		[[9327, 9327], 'mapped', [49, 54]],
		[[9328, 9328], 'mapped', [49, 55]],
		[[9329, 9329], 'mapped', [49, 56]],
		[[9330, 9330], 'mapped', [49, 57]],
		[[9331, 9331], 'mapped', [50, 48]],
		[[9332, 9332], 'disallowed_STD3_mapped', [40, 49, 41]],
		[[9333, 9333], 'disallowed_STD3_mapped', [40, 50, 41]],
		[[9334, 9334], 'disallowed_STD3_mapped', [40, 51, 41]],
		[[9335, 9335], 'disallowed_STD3_mapped', [40, 52, 41]],
		[[9336, 9336], 'disallowed_STD3_mapped', [40, 53, 41]],
		[[9337, 9337], 'disallowed_STD3_mapped', [40, 54, 41]],
		[[9338, 9338], 'disallowed_STD3_mapped', [40, 55, 41]],
		[[9339, 9339], 'disallowed_STD3_mapped', [40, 56, 41]],
		[[9340, 9340], 'disallowed_STD3_mapped', [40, 57, 41]],
		[[9341, 9341], 'disallowed_STD3_mapped', [40, 49, 48, 41]],
		[[9342, 9342], 'disallowed_STD3_mapped', [40, 49, 49, 41]],
		[[9343, 9343], 'disallowed_STD3_mapped', [40, 49, 50, 41]],
		[[9344, 9344], 'disallowed_STD3_mapped', [40, 49, 51, 41]],
		[[9345, 9345], 'disallowed_STD3_mapped', [40, 49, 52, 41]],
		[[9346, 9346], 'disallowed_STD3_mapped', [40, 49, 53, 41]],
		[[9347, 9347], 'disallowed_STD3_mapped', [40, 49, 54, 41]],
		[[9348, 9348], 'disallowed_STD3_mapped', [40, 49, 55, 41]],
		[[9349, 9349], 'disallowed_STD3_mapped', [40, 49, 56, 41]],
		[[9350, 9350], 'disallowed_STD3_mapped', [40, 49, 57, 41]],
		[[9351, 9351], 'disallowed_STD3_mapped', [40, 50, 48, 41]],
		[[9352, 9371], 'disallowed'],
		[[9372, 9372], 'disallowed_STD3_mapped', [40, 97, 41]],
		[[9373, 9373], 'disallowed_STD3_mapped', [40, 98, 41]],
		[[9374, 9374], 'disallowed_STD3_mapped', [40, 99, 41]],
		[[9375, 9375], 'disallowed_STD3_mapped', [40, 100, 41]],
		[[9376, 9376], 'disallowed_STD3_mapped', [40, 101, 41]],
		[[9377, 9377], 'disallowed_STD3_mapped', [40, 102, 41]],
		[[9378, 9378], 'disallowed_STD3_mapped', [40, 103, 41]],
		[[9379, 9379], 'disallowed_STD3_mapped', [40, 104, 41]],
		[[9380, 9380], 'disallowed_STD3_mapped', [40, 105, 41]],
		[[9381, 9381], 'disallowed_STD3_mapped', [40, 106, 41]],
		[[9382, 9382], 'disallowed_STD3_mapped', [40, 107, 41]],
		[[9383, 9383], 'disallowed_STD3_mapped', [40, 108, 41]],
		[[9384, 9384], 'disallowed_STD3_mapped', [40, 109, 41]],
		[[9385, 9385], 'disallowed_STD3_mapped', [40, 110, 41]],
		[[9386, 9386], 'disallowed_STD3_mapped', [40, 111, 41]],
		[[9387, 9387], 'disallowed_STD3_mapped', [40, 112, 41]],
		[[9388, 9388], 'disallowed_STD3_mapped', [40, 113, 41]],
		[[9389, 9389], 'disallowed_STD3_mapped', [40, 114, 41]],
		[[9390, 9390], 'disallowed_STD3_mapped', [40, 115, 41]],
		[[9391, 9391], 'disallowed_STD3_mapped', [40, 116, 41]],
		[[9392, 9392], 'disallowed_STD3_mapped', [40, 117, 41]],
		[[9393, 9393], 'disallowed_STD3_mapped', [40, 118, 41]],
		[[9394, 9394], 'disallowed_STD3_mapped', [40, 119, 41]],
		[[9395, 9395], 'disallowed_STD3_mapped', [40, 120, 41]],
		[[9396, 9396], 'disallowed_STD3_mapped', [40, 121, 41]],
		[[9397, 9397], 'disallowed_STD3_mapped', [40, 122, 41]],
		[[9398, 9398], 'mapped', [97]],
		[[9399, 9399], 'mapped', [98]],
		[[9400, 9400], 'mapped', [99]],
		[[9401, 9401], 'mapped', [100]],
		[[9402, 9402], 'mapped', [101]],
		[[9403, 9403], 'mapped', [102]],
		[[9404, 9404], 'mapped', [103]],
		[[9405, 9405], 'mapped', [104]],
		[[9406, 9406], 'mapped', [105]],
		[[9407, 9407], 'mapped', [106]],
		[[9408, 9408], 'mapped', [107]],
		[[9409, 9409], 'mapped', [108]],
		[[9410, 9410], 'mapped', [109]],
		[[9411, 9411], 'mapped', [110]],
		[[9412, 9412], 'mapped', [111]],
		[[9413, 9413], 'mapped', [112]],
		[[9414, 9414], 'mapped', [113]],
		[[9415, 9415], 'mapped', [114]],
		[[9416, 9416], 'mapped', [115]],
		[[9417, 9417], 'mapped', [116]],
		[[9418, 9418], 'mapped', [117]],
		[[9419, 9419], 'mapped', [118]],
		[[9420, 9420], 'mapped', [119]],
		[[9421, 9421], 'mapped', [120]],
		[[9422, 9422], 'mapped', [121]],
		[[9423, 9423], 'mapped', [122]],
		[[9424, 9424], 'mapped', [97]],
		[[9425, 9425], 'mapped', [98]],
		[[9426, 9426], 'mapped', [99]],
		[[9427, 9427], 'mapped', [100]],
		[[9428, 9428], 'mapped', [101]],
		[[9429, 9429], 'mapped', [102]],
		[[9430, 9430], 'mapped', [103]],
		[[9431, 9431], 'mapped', [104]],
		[[9432, 9432], 'mapped', [105]],
		[[9433, 9433], 'mapped', [106]],
		[[9434, 9434], 'mapped', [107]],
		[[9435, 9435], 'mapped', [108]],
		[[9436, 9436], 'mapped', [109]],
		[[9437, 9437], 'mapped', [110]],
		[[9438, 9438], 'mapped', [111]],
		[[9439, 9439], 'mapped', [112]],
		[[9440, 9440], 'mapped', [113]],
		[[9441, 9441], 'mapped', [114]],
		[[9442, 9442], 'mapped', [115]],
		[[9443, 9443], 'mapped', [116]],
		[[9444, 9444], 'mapped', [117]],
		[[9445, 9445], 'mapped', [118]],
		[[9446, 9446], 'mapped', [119]],
		[[9447, 9447], 'mapped', [120]],
		[[9448, 9448], 'mapped', [121]],
		[[9449, 9449], 'mapped', [122]],
		[[9450, 9450], 'mapped', [48]],
		[[9451, 9470], 'valid', [], 'NV8'],
		[[9471, 9471], 'valid', [], 'NV8'],
		[[9472, 9621], 'valid', [], 'NV8'],
		[[9622, 9631], 'valid', [], 'NV8'],
		[[9632, 9711], 'valid', [], 'NV8'],
		[[9712, 9719], 'valid', [], 'NV8'],
		[[9720, 9727], 'valid', [], 'NV8'],
		[[9728, 9747], 'valid', [], 'NV8'],
		[[9748, 9749], 'valid', [], 'NV8'],
		[[9750, 9751], 'valid', [], 'NV8'],
		[[9752, 9752], 'valid', [], 'NV8'],
		[[9753, 9753], 'valid', [], 'NV8'],
		[[9754, 9839], 'valid', [], 'NV8'],
		[[9840, 9841], 'valid', [], 'NV8'],
		[[9842, 9853], 'valid', [], 'NV8'],
		[[9854, 9855], 'valid', [], 'NV8'],
		[[9856, 9865], 'valid', [], 'NV8'],
		[[9866, 9873], 'valid', [], 'NV8'],
		[[9874, 9884], 'valid', [], 'NV8'],
		[[9885, 9885], 'valid', [], 'NV8'],
		[[9886, 9887], 'valid', [], 'NV8'],
		[[9888, 9889], 'valid', [], 'NV8'],
		[[9890, 9905], 'valid', [], 'NV8'],
		[[9906, 9906], 'valid', [], 'NV8'],
		[[9907, 9916], 'valid', [], 'NV8'],
		[[9917, 9919], 'valid', [], 'NV8'],
		[[9920, 9923], 'valid', [], 'NV8'],
		[[9924, 9933], 'valid', [], 'NV8'],
		[[9934, 9934], 'valid', [], 'NV8'],
		[[9935, 9953], 'valid', [], 'NV8'],
		[[9954, 9954], 'valid', [], 'NV8'],
		[[9955, 9955], 'valid', [], 'NV8'],
		[[9956, 9959], 'valid', [], 'NV8'],
		[[9960, 9983], 'valid', [], 'NV8'],
		[[9984, 9984], 'valid', [], 'NV8'],
		[[9985, 9988], 'valid', [], 'NV8'],
		[[9989, 9989], 'valid', [], 'NV8'],
		[[9990, 9993], 'valid', [], 'NV8'],
		[[9994, 9995], 'valid', [], 'NV8'],
		[[9996, 10023], 'valid', [], 'NV8'],
		[[10024, 10024], 'valid', [], 'NV8'],
		[[10025, 10059], 'valid', [], 'NV8'],
		[[10060, 10060], 'valid', [], 'NV8'],
		[[10061, 10061], 'valid', [], 'NV8'],
		[[10062, 10062], 'valid', [], 'NV8'],
		[[10063, 10066], 'valid', [], 'NV8'],
		[[10067, 10069], 'valid', [], 'NV8'],
		[[10070, 10070], 'valid', [], 'NV8'],
		[[10071, 10071], 'valid', [], 'NV8'],
		[[10072, 10078], 'valid', [], 'NV8'],
		[[10079, 10080], 'valid', [], 'NV8'],
		[[10081, 10087], 'valid', [], 'NV8'],
		[[10088, 10101], 'valid', [], 'NV8'],
		[[10102, 10132], 'valid', [], 'NV8'],
		[[10133, 10135], 'valid', [], 'NV8'],
		[[10136, 10159], 'valid', [], 'NV8'],
		[[10160, 10160], 'valid', [], 'NV8'],
		[[10161, 10174], 'valid', [], 'NV8'],
		[[10175, 10175], 'valid', [], 'NV8'],
		[[10176, 10182], 'valid', [], 'NV8'],
		[[10183, 10186], 'valid', [], 'NV8'],
		[[10187, 10187], 'valid', [], 'NV8'],
		[[10188, 10188], 'valid', [], 'NV8'],
		[[10189, 10189], 'valid', [], 'NV8'],
		[[10190, 10191], 'valid', [], 'NV8'],
		[[10192, 10219], 'valid', [], 'NV8'],
		[[10220, 10223], 'valid', [], 'NV8'],
		[[10224, 10239], 'valid', [], 'NV8'],
		[[10240, 10495], 'valid', [], 'NV8'],
		[[10496, 10763], 'valid', [], 'NV8'],
		[[10764, 10764], 'mapped', [8747, 8747, 8747, 8747]],
		[[10765, 10867], 'valid', [], 'NV8'],
		[[10868, 10868], 'disallowed_STD3_mapped', [58, 58, 61]],
		[[10869, 10869], 'disallowed_STD3_mapped', [61, 61]],
		[[10870, 10870], 'disallowed_STD3_mapped', [61, 61, 61]],
		[[10871, 10971], 'valid', [], 'NV8'],
		[[10972, 10972], 'mapped', [10973, 824]],
		[[10973, 11007], 'valid', [], 'NV8'],
		[[11008, 11021], 'valid', [], 'NV8'],
		[[11022, 11027], 'valid', [], 'NV8'],
		[[11028, 11034], 'valid', [], 'NV8'],
		[[11035, 11039], 'valid', [], 'NV8'],
		[[11040, 11043], 'valid', [], 'NV8'],
		[[11044, 11084], 'valid', [], 'NV8'],
		[[11085, 11087], 'valid', [], 'NV8'],
		[[11088, 11092], 'valid', [], 'NV8'],
		[[11093, 11097], 'valid', [], 'NV8'],
		[[11098, 11123], 'valid', [], 'NV8'],
		[[11124, 11125], 'disallowed'],
		[[11126, 11157], 'valid', [], 'NV8'],
		[[11158, 11159], 'disallowed'],
		[[11160, 11193], 'valid', [], 'NV8'],
		[[11194, 11196], 'disallowed'],
		[[11197, 11208], 'valid', [], 'NV8'],
		[[11209, 11209], 'disallowed'],
		[[11210, 11217], 'valid', [], 'NV8'],
		[[11218, 11243], 'disallowed'],
		[[11244, 11247], 'valid', [], 'NV8'],
		[[11248, 11263], 'disallowed'],
		[[11264, 11264], 'mapped', [11312]],
		[[11265, 11265], 'mapped', [11313]],
		[[11266, 11266], 'mapped', [11314]],
		[[11267, 11267], 'mapped', [11315]],
		[[11268, 11268], 'mapped', [11316]],
		[[11269, 11269], 'mapped', [11317]],
		[[11270, 11270], 'mapped', [11318]],
		[[11271, 11271], 'mapped', [11319]],
		[[11272, 11272], 'mapped', [11320]],
		[[11273, 11273], 'mapped', [11321]],
		[[11274, 11274], 'mapped', [11322]],
		[[11275, 11275], 'mapped', [11323]],
		[[11276, 11276], 'mapped', [11324]],
		[[11277, 11277], 'mapped', [11325]],
		[[11278, 11278], 'mapped', [11326]],
		[[11279, 11279], 'mapped', [11327]],
		[[11280, 11280], 'mapped', [11328]],
		[[11281, 11281], 'mapped', [11329]],
		[[11282, 11282], 'mapped', [11330]],
		[[11283, 11283], 'mapped', [11331]],
		[[11284, 11284], 'mapped', [11332]],
		[[11285, 11285], 'mapped', [11333]],
		[[11286, 11286], 'mapped', [11334]],
		[[11287, 11287], 'mapped', [11335]],
		[[11288, 11288], 'mapped', [11336]],
		[[11289, 11289], 'mapped', [11337]],
		[[11290, 11290], 'mapped', [11338]],
		[[11291, 11291], 'mapped', [11339]],
		[[11292, 11292], 'mapped', [11340]],
		[[11293, 11293], 'mapped', [11341]],
		[[11294, 11294], 'mapp
Download .txt
gitextract_0f6woyv4/

├── .editorconfig
├── .eslintignore
├── .gitattributes
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── copilot-instructions.md
│   ├── dependabot.yml
│   ├── renovate.json5
│   └── workflows/
│       ├── Build and test.yml
│       ├── codeql.yml
│       ├── dependency-review.yml
│       └── scorecard.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   ├── pre-commit
│   └── pre-push
├── .npmignore
├── .prettierignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASES.md
├── SECURITY.md
├── TESTLOG.md
├── bin/
│   ├── alaserver.js
│   └── alasql-cli.js
├── build.sh
├── docs/
│   └── PRECOMPILE.md
├── examples/
│   ├── angular/
│   │   └── import-export-excel/
│   │       ├── import-export-to-excel.factory.js
│   │       ├── import-from-excel.directive.js
│   │       ├── test.controller.js
│   │       └── test.html
│   ├── country/
│   │   └── city.js
│   ├── nodesample.js
│   ├── other/
│   │   └── test.js
│   ├── param.js
│   ├── precompile/
│   │   ├── build/
│   │   │   ├── myCode.bundle.js
│   │   │   └── myCodeIsolate.bundle.js
│   │   ├── build.sh
│   │   └── myCode.js
│   ├── promise.js
│   ├── simple/
│   │   └── ex102.js
│   └── sqlite/
│       └── test.js
├── modules/
│   └── xlsx/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── bin/
│       │   └── xlsx.njs
│       ├── bower.json
│       ├── dist/
│       │   ├── LICENSE
│       │   ├── cpexcel.d.ts
│       │   ├── cpexcel.full.mjs
│       │   ├── cpexcel.js
│       │   ├── xlsx.extendscript.js
│       │   ├── xlsx.zahl.js
│       │   ├── xlsx.zahl.mjs
│       │   └── zahl.d.ts
│       ├── package.ori.json
│       ├── types/
│       │   ├── index.d.ts
│       │   └── tsconfig.json
│       ├── xlsx.js
│       ├── xlsx.mjs
│       └── xlsxworker.js
├── package.json
├── src/
│   ├── 05copyright.js
│   ├── 10start.js
│   ├── 12pretty.js
│   ├── 15utility.js
│   ├── 16comments.js
│   ├── 17alasql.js
│   ├── 18promise.js
│   ├── 20database.js
│   ├── 21transaction.js
│   ├── 23table.js
│   ├── 24view.js
│   ├── 25queryclass.js
│   ├── 28yy.js
│   ├── 30statements.js
│   ├── 35search.js
│   ├── 38query.js
│   ├── 39dojoin.js
│   ├── 40select.js
│   ├── 41exists.js
│   ├── 420from.js
│   ├── 421join.js
│   ├── 422where.js
│   ├── 423groupby.js
│   ├── 424select.js
│   ├── 425having.js
│   ├── 426orderby.js
│   ├── 427pivot.js
│   ├── 43rollup.js
│   ├── 44defcols.js
│   ├── 45union.js
│   ├── 46apply.js
│   ├── 47over.js
│   ├── 50expression.js
│   ├── 52linq.js
│   ├── 55functions.js
│   ├── 56sprintf.js
│   ├── 57case.js
│   ├── 58json.js
│   ├── 59convert.js
│   ├── 60createtable.js
│   ├── 61date.js
│   ├── 62droptable.js
│   ├── 63createvertex.js
│   ├── 64altertable.js
│   ├── 65createindex.js
│   ├── 66dropindex.js
│   ├── 67withselect.js
│   ├── 68if.js
│   ├── 69while.js
│   ├── 70insert.js
│   ├── 71trigger.js
│   ├── 72delete.js
│   ├── 74update.js
│   ├── 75merge.js
│   ├── 76usedatabase.js
│   ├── 77declare.js
│   ├── 78show.js
│   ├── 79set.js
│   ├── 80console.js
│   ├── 81commit.js
│   ├── 821tsql.js
│   ├── 822mysql.js
│   ├── 823postgres.js
│   ├── 824oracle.js
│   ├── 825sqlite.js
│   ├── 826orientdb.js
│   ├── 830into.js
│   ├── 831xls.js
│   ├── 832xlsxml.js
│   ├── 833xlsx.js
│   ├── 839zip.js
│   ├── 843xml.js
│   ├── 844gexf.js
│   ├── 84from.js
│   ├── 85help.js
│   ├── 86print.js
│   ├── 87source.js
│   ├── 88require.js
│   ├── 89assert.js
│   ├── 91indexeddb.js
│   ├── 92localstorage.js
│   ├── 93sqljs.js
│   ├── 94filestorage.js
│   ├── 97saveas.js
│   ├── 98finish.js
│   ├── 99worker-finish.js
│   ├── 99worker-start.js
│   ├── 99worker.js
│   ├── FileSaver.js
│   ├── alasqlparser.jison
│   ├── alasqlparser.js
│   ├── console/
│   │   └── README.md
│   ├── db2/
│   │   └── README.md
│   ├── debug/
│   │   └── README.md
│   ├── echo/
│   │   ├── README.md
│   │   └── alasql-echo.js
│   ├── filestorage/
│   │   └── README.md
│   ├── filesystem/
│   │   └── README.md
│   ├── graph/
│   │   └── README.md
│   ├── help/
│   │   └── README.md
│   ├── html/
│   │   └── README.md
│   ├── indexeddb/
│   │   └── README.md
│   ├── linq/
│   │   └── README.md
│   ├── localstorage/
│   │   └── README.md
│   ├── lovefield/
│   │   └── README.md
│   ├── md/
│   │   └── README.md
│   ├── mongodb/
│   │   └── README.md
│   ├── mysql/
│   │   └── README.md
│   ├── neo4j/
│   │   └── README.md
│   ├── oracle/
│   │   └── README.md
│   ├── orientdb/
│   │   ├── README.md
│   │   ├── alasql-orientdb.js
│   │   └── orientdbparser.jison
│   ├── postgres/
│   │   └── README.md
│   ├── pouchdb/
│   │   └── README.md
│   ├── precompile/
│   │   ├── README.md
│   │   └── index.js
│   ├── pretty/
│   │   └── README.md
│   ├── prolog/
│   │   ├── README.md
│   │   ├── alasql-prolog.js
│   │   └── prolog.coffee
│   ├── sprintf/
│   │   └── README.md
│   ├── sqlite/
│   │   └── README.md
│   ├── sqljs/
│   │   └── README.md
│   ├── tabletop/
│   │   └── README.md
│   ├── tsql/
│   │   └── README.md
│   ├── websql/
│   │   ├── README.md
│   │   └── sqliteparser.jison
│   ├── xls/
│   │   └── README.md
│   └── xml/
│       └── README.md
├── test/
│   ├── !testlog/
│   │   ├── Chakra.md
│   │   ├── Chrome.md
│   │   ├── Edge.md
│   │   ├── Firefox.md
│   │   ├── IE.md
│   │   ├── SQLlogic Chakra.md
│   │   ├── SQLlogic.md
│   │   └── Safari.md
│   ├── browserTestRunner.js
│   ├── browserTestRunner.tmlp.html
│   ├── coverage/
│   │   ├── coverage.json
│   │   ├── lcov-report/
│   │   │   ├── base.css
│   │   │   ├── index.html
│   │   │   ├── lib/
│   │   │   │   └── zt/
│   │   │   │       ├── index.html
│   │   │   │       └── zt.js.html
│   │   │   ├── prettify.css
│   │   │   ├── prettify.js
│   │   │   └── sorter.js
│   │   └── lcov.info
│   ├── lib/
│   │   ├── assert/
│   │   │   └── assert.js
│   │   ├── mocha/
│   │   │   ├── mocha.css
│   │   │   └── mocha.js
│   │   └── zt/
│   │       └── zt.js
│   ├── performance/
│   │   ├── #1027/
│   │   │   ├── README.md
│   │   │   ├── perf-comparison.js
│   │   │   ├── perf-direct-load.js
│   │   │   └── perf-join-index.js
│   │   ├── #118/
│   │   │   ├── README.md
│   │   │   ├── perf-cartesian.js
│   │   │   ├── perf-implicit-vs-explicit.js
│   │   │   └── perf-many-joins.js
│   │   ├── benchmark_alasql.js
│   │   ├── count.html
│   │   ├── speed/
│   │   │   ├── speedtest.js
│   │   │   └── test01.js
│   │   ├── var.html
│   │   ├── vssqlike.html
│   │   ├── vssqljs.html
│   │   ├── vssqljs2.html
│   │   ├── vssqljs3.html
│   │   └── vssqljs4.html
│   ├── skip/
│   │   ├── test119.js
│   │   ├── test123.js
│   │   ├── test131.js
│   │   ├── test132.js
│   │   ├── test134.js
│   │   ├── test135.js
│   │   └── test136.js
│   ├── test-csv-string-type.js
│   ├── test.js
│   ├── test000.js
│   ├── test001.js
│   ├── test002.js
│   ├── test003.js
│   ├── test004.js
│   ├── test005.js
│   ├── test006.js
│   ├── test007.js
│   ├── test008.js
│   ├── test009.js
│   ├── test010.js
│   ├── test011.js
│   ├── test012.js
│   ├── test013.js
│   ├── test014.js
│   ├── test015.js
│   ├── test016.js
│   ├── test016a.js
│   ├── test017.js
│   ├── test018.js
│   ├── test019.js
│   ├── test020.js
│   ├── test021.js
│   ├── test022.js
│   ├── test023.js
│   ├── test024.js
│   ├── test025.js
│   ├── test026.js
│   ├── test027.js
│   ├── test028.js
│   ├── test029.js
│   ├── test030.js
│   ├── test031.js
│   ├── test032.js
│   ├── test033.js
│   ├── test034.js
│   ├── test035.js
│   ├── test036.js
│   ├── test037.js
│   ├── test038.js
│   ├── test039.js
│   ├── test040.js
│   ├── test041.js
│   ├── test042.js
│   ├── test043.js
│   ├── test044.js
│   ├── test045.js
│   ├── test046.js
│   ├── test047.js
│   ├── test048-B.js
│   ├── test048.js
│   ├── test049.js
│   ├── test050.js
│   ├── test051.js
│   ├── test052.js
│   ├── test053.js
│   ├── test054.js
│   ├── test055.js
│   ├── test056.js
│   ├── test057.js
│   ├── test058.js
│   ├── test059.js
│   ├── test060.js
│   ├── test061.js
│   ├── test062.js
│   ├── test063.js
│   ├── test064.js
│   ├── test065.js
│   ├── test066.js
│   ├── test067.js
│   ├── test068.js
│   ├── test069.js
│   ├── test070.js
│   ├── test071.js
│   ├── test072.js
│   ├── test073.js
│   ├── test074.js
│   ├── test075.js
│   ├── test076.js
│   ├── test077.js
│   ├── test078.js
│   ├── test079.js
│   ├── test080.js
│   ├── test081.js
│   ├── test082.js
│   ├── test083.js
│   ├── test084.js
│   ├── test085.js
│   ├── test086.js
│   ├── test087.js
│   ├── test088.js
│   ├── test089.js
│   ├── test090.js
│   ├── test091.js
│   ├── test092.js
│   ├── test093.js
│   ├── test094.js
│   ├── test095.js
│   ├── test096.js
│   ├── test097.js
│   ├── test098.js
│   ├── test099.js
│   ├── test100.js
│   ├── test1004.js
│   ├── test1009.js
│   ├── test101.js
│   ├── test102.js
│   ├── test1027.js
│   ├── test103.js
│   ├── test104.js
│   ├── test105.js
│   ├── test106.js
│   ├── test107-B.js
│   ├── test107.js
│   ├── test108.js
│   ├── test109.js
│   ├── test110.js
│   ├── test1109.js
│   ├── test111.js
│   ├── test1119.js
│   ├── test112.js
│   ├── test1126.js
│   ├── test113.js
│   ├── test114.js
│   ├── test1146.js
│   ├── test1147.js
│   ├── test115.js
│   ├── test1154.js
│   ├── test116.js
│   ├── test117.js
│   ├── test1173.js
│   ├── test118-B.js
│   ├── test118.js
│   ├── test1185.js
│   ├── test119.js
│   ├── test120.js
│   ├── test121.js
│   ├── test1211.js
│   ├── test122.js
│   ├── test123.js
│   ├── test124.js
│   ├── test125.js
│   ├── test125B.js
│   ├── test126.js
│   ├── test1263.js
│   ├── test127.js
│   ├── test127.sql
│   ├── test1278.js
│   ├── test128-B.js
│   ├── test128.js
│   ├── test128.sql
│   ├── test129.js
│   ├── test130-B.js
│   ├── test130.js
│   ├── test131.js
│   ├── test131.sql
│   ├── test132.js
│   ├── test133.js
│   ├── test134.csv
│   ├── test134.js
│   ├── test134.tab
│   ├── test135.js
│   ├── test136-B.js
│   ├── test136.js
│   ├── test137.js
│   ├── test138.js
│   ├── test1384.js
│   ├── test139.js
│   ├── test140.js
│   ├── test1400.js
│   ├── test1400a.csv
│   ├── test1400b.csv
│   ├── test1406.js
│   ├── test1409.js
│   ├── test141.js
│   ├── test1415.js
│   ├── test142.js
│   ├── test143-B.js
│   ├── test143.js
│   ├── test144.js
│   ├── test145.js
│   ├── test1455.js
│   ├── test146.js
│   ├── test147.js
│   ├── test148.js
│   ├── test1484.js
│   ├── test149.js
│   ├── test1495.js
│   ├── test1496.js
│   ├── test150.js
│   ├── test151.js
│   ├── test152.js
│   ├── test1526.js
│   ├── test1529.js
│   ├── test153.js
│   ├── test154.js
│   ├── test1547.js
│   ├── test155-B.js
│   ├── test155.js
│   ├── test1556.js
│   ├── test156.js
│   ├── test157.js
│   ├── test157.txt
│   ├── test157a.csv
│   ├── test157a.tab
│   ├── test157b.csv
│   ├── test157b.tab
│   ├── test158.js
│   ├── test159.js
│   ├── test160.js
│   ├── test160.txt
│   ├── test161.js
│   ├── test162.js
│   ├── test163.js
│   ├── test164.js
│   ├── test1641.js
│   ├── test1643.js
│   ├── test1645.js
│   ├── test166.js
│   ├── test1666.js
│   ├── test167.js
│   ├── test167B.js
│   ├── test168.js
│   ├── test168.xls
│   ├── test168.xlsx
│   ├── test1684.js
│   ├── test169.js
│   ├── test169.txt
│   ├── test169a.csv
│   ├── test169a.tab
│   ├── test169b.tab
│   ├── test170.js
│   ├── test172.js
│   ├── test173.js
│   ├── test1734.js
│   ├── test174.js
│   ├── test1740.js
│   ├── test175.js
│   ├── test176.js
│   ├── test176a.tab
│   ├── test176b.csv
│   ├── test176c.csv
│   ├── test176d.csv
│   ├── test177.js
│   ├── test178.js
│   ├── test1789.js
│   ├── test179.js
│   ├── test1796.js
│   ├── test1797.js
│   ├── test180.js
│   ├── test181.js
│   ├── test182.js
│   ├── test1820.js
│   ├── test1829.js
│   ├── test183.js
│   ├── test184.js
│   ├── test1848.js
│   ├── test185.js
│   ├── test186.js
│   ├── test187.js
│   ├── test1871.js
│   ├── test188.js
│   ├── test1885.js
│   ├── test1889.js
│   ├── test189.js
│   ├── test189.sql
│   ├── test1898.js
│   ├── test190.js
│   ├── test1904.js
│   ├── test191.js
│   ├── test1919.js
│   ├── test1919.jsonl
│   ├── test1919.ndjson
│   ├── test192.js
│   ├── test193.js
│   ├── test1936.js
│   ├── test194.js
│   ├── test195.js
│   ├── test196.js
│   ├── test1965.js
│   ├── test1966.js
│   ├── test1967.js
│   ├── test197.js
│   ├── test1977.js
│   ├── test198-1.sql
│   ├── test198-2.sql
│   ├── test198.js
│   ├── test1983.js
│   ├── test1985.js
│   ├── test199.js
│   ├── test200.js
│   ├── test2000.js
│   ├── test201.js
│   ├── test202.js
│   ├── test2027.js
│   ├── test203.js
│   ├── test2039.js
│   ├── test203myfn.js1
│   ├── test203myfn2.js1
│   ├── test204.js
│   ├── test205.js
│   ├── test206.js
│   ├── test207.js
│   ├── test2070.js
│   ├── test208.js
│   ├── test209.js
│   ├── test210.js
│   ├── test211.js
│   ├── test2112.js
│   ├── test212.js
│   ├── test213.js
│   ├── test214.js
│   ├── test2141.js
│   ├── test2147.js
│   ├── test2149-with-txt.sql
│   ├── test2149-without-txt.sql
│   ├── test2149.js
│   ├── test215.js
│   ├── test2155.js
│   ├── test216.js
│   ├── test2169.js
│   ├── test2169B.js
│   ├── test217.js
│   ├── test218.js
│   ├── test2184.js
│   ├── test219.js
│   ├── test2197.js
│   ├── test220.js
│   ├── test2200.js
│   ├── test2203.js
│   ├── test221.js
│   ├── test2218.js
│   ├── test222.js
│   ├── test2222.js
│   ├── test2223.js
│   ├── test2224.js
│   ├── test223.js
│   ├── test2239.js
│   ├── test224.js
│   ├── test2248.js
│   ├── test225.js
│   ├── test226.js
│   ├── test227.js
│   ├── test228.js
│   ├── test2280.js
│   ├── test229.js
│   ├── test230.js
│   ├── test231.js
│   ├── test2317.js
│   ├── test2318.js
│   ├── test232.js
│   ├── test233.js
│   ├── test233.sql
│   ├── test234.js
│   ├── test234.sql
│   ├── test2348.js
│   ├── test235.js
│   ├── test2359.js
│   ├── test236.js
│   ├── test2360.js
│   ├── test2361.js
│   ├── test237.js
│   ├── test238.js
│   ├── test238a.csv
│   ├── test238b.xlsx
│   ├── test239.js
│   ├── test240.js
│   ├── test2408.js
│   ├── test241.js
│   ├── test2413.js
│   ├── test2414.js
│   ├── test242.js
│   ├── test242.xlsx
│   ├── test2420.js
│   ├── test243.js
│   ├── test244.js
│   ├── test245.js
│   ├── test246.js
│   ├── test247.js
│   ├── test248.js
│   ├── test249.js
│   ├── test250.js
│   ├── test251.js
│   ├── test252.js
│   ├── test253.js
│   ├── test254.js
│   ├── test255.js
│   ├── test256.js
│   ├── test257.js
│   ├── test258.js
│   ├── test259.js
│   ├── test260.js
│   ├── test261.js
│   ├── test262.js
│   ├── test263.js
│   ├── test264.js
│   ├── test265.js
│   ├── test266.js
│   ├── test267.js
│   ├── test268.js
│   ├── test269.js
│   ├── test270.js
│   ├── test271.js
│   ├── test272.js
│   ├── test273.js
│   ├── test274.js
│   ├── test275.js
│   ├── test276.js
│   ├── test277.js
│   ├── test278.js
│   ├── test279.js
│   ├── test280.js
│   ├── test281.js
│   ├── test282.js
│   ├── test283.js
│   ├── test284.js
│   ├── test285.js
│   ├── test286.js
│   ├── test287.js
│   ├── test288.js
│   ├── test289.js
│   ├── test290.js
│   ├── test291.js
│   ├── test292-B.js
│   ├── test292.js
│   ├── test293.js
│   ├── test294.js
│   ├── test295.js
│   ├── test296.js
│   ├── test297.js
│   ├── test298.js
│   ├── test299.js
│   ├── test300.js
│   ├── test301.js
│   ├── test302.js
│   ├── test303.js
│   ├── test304.js
│   ├── test305.js
│   ├── test305a.gexf
│   ├── test306.js
│   ├── test306.xml
│   ├── test306a.xml
│   ├── test307.js
│   ├── test308.js
│   ├── test309.js
│   ├── test310.js
│   ├── test311.js
│   ├── test312.js
│   ├── test313.js
│   ├── test314.js
│   ├── test315.js
│   ├── test316.js
│   ├── test317.js
│   ├── test318.js
│   ├── test319.js
│   ├── test320.js
│   ├── test321.js
│   ├── test321a.csv
│   ├── test322.js
│   ├── test323.js
│   ├── test324.js
│   ├── test324.sql
│   ├── test325.js
│   ├── test326.js
│   ├── test327.js
│   ├── test328.js
│   ├── test329.js
│   ├── test330.js
│   ├── test331.js
│   ├── test332.js
│   ├── test333.js
│   ├── test334.js
│   ├── test335.js
│   ├── test336.js
│   ├── test337.js
│   ├── test338.js
│   ├── test339.js
│   ├── test340.js
│   ├── test341.js
│   ├── test342.js
│   ├── test343.js
│   ├── test344.js
│   ├── test345.js
│   ├── test346.js
│   ├── test347.js
│   ├── test348.js
│   ├── test349.js
│   ├── test350.js
│   ├── test351.js
│   ├── test352.js
│   ├── test353.js
│   ├── test354.js
│   ├── test355.js
│   ├── test356.js
│   ├── test357.js
│   ├── test358.js
│   ├── test359.js
│   ├── test360.js
│   ├── test361.js
│   ├── test362.js
│   ├── test363.js
│   ├── test364.js
│   ├── test365.js
│   ├── test366.js
│   ├── test367.js
│   ├── test368.js
│   ├── test369.js
│   ├── test37.js
│   ├── test370.js
│   ├── test371.js
│   ├── test372.js
│   ├── test373.js
│   ├── test374.js
│   ├── test375.js
│   ├── test376.js
│   ├── test377.js
│   ├── test378.js
│   ├── test379.js
│   ├── test380.js
│   ├── test381.js
│   ├── test382.js
│   ├── test383.js
│   ├── test384.js
│   ├── test385.js
│   ├── test386.js
│   ├── test387.js
│   ├── test388.js
│   ├── test389.js
│   ├── test390.js
│   ├── test391.js
│   ├── test392.js
│   ├── test393.js
│   ├── test394.js
│   ├── test395.js
│   ├── test396.js
│   ├── test397.js
│   ├── test398.js
│   ├── test399.js
│   ├── test400.js
│   ├── test401.js
│   ├── test402.js
│   ├── test403.js
│   ├── test404.js
│   ├── test404.sql
│   ├── test405.js
│   ├── test406.js
│   ├── test407.js
│   ├── test408.js
│   ├── test409.js
│   ├── test410.js
│   ├── test411.js
│   ├── test411.xlsx
│   ├── test412.js
│   ├── test413.js
│   ├── test414.js
│   ├── test415.js
│   ├── test416.js
│   ├── test417.js
│   ├── test418.js
│   ├── test419.js
│   ├── test419.xlsx
│   ├── test419a.txt
│   ├── test42.js
│   ├── test420.js
│   ├── test420.xlsx
│   ├── test421.js
│   ├── test422.js
│   ├── test423.js
│   ├── test424.js
│   ├── test425.js
│   ├── test426.js
│   ├── test427.js
│   ├── test428.js
│   ├── test429.js
│   ├── test430.js
│   ├── test431.js
│   ├── test432.js
│   ├── test433.js
│   ├── test434.js
│   ├── test485.js
│   ├── test490.js
│   ├── test525.js
│   ├── test536-B.js
│   ├── test547.js
│   ├── test604.js
│   ├── test605.js
│   ├── test606-B.js
│   ├── test606.js
│   ├── test607.js
│   ├── test608.js
│   ├── test609.js
│   ├── test610.js
│   ├── test611.js
│   ├── test612.js
│   ├── test613.js
│   ├── test614.js
│   ├── test614.xlsx
│   ├── test615.js
│   ├── test615.xlsx
│   ├── test616.js
│   ├── test617.js
│   ├── test618.js
│   ├── test619.js
│   ├── test620.js
│   ├── test622.js
│   ├── test623.js
│   ├── test624CSVParsing.js
│   ├── test625.js
│   ├── test625.xlsx
│   ├── test626.csv
│   ├── test626.js
│   ├── test627.js
│   ├── test635-B.js
│   ├── test671.js
│   ├── test7.js
│   ├── test735.js
│   ├── test789.js
│   ├── test79-B.js
│   ├── test800.js
│   ├── test801.js
│   ├── test802.js
│   ├── test803.js
│   ├── test804.js
│   ├── test805.js
│   ├── test806.js
│   ├── test807.js
│   ├── test808.js
│   ├── test809.js
│   ├── test810.js
│   ├── test811.js
│   ├── test812.js
│   ├── test813.js
│   ├── test814.js
│   ├── test815.js
│   ├── test816.js
│   ├── test817.js
│   ├── test818.js
│   ├── test819.js
│   ├── test845-B.js
│   ├── test845.js
│   ├── test846.js
│   ├── test847.js
│   ├── test848.js
│   ├── test848.xlsx
│   ├── test856.js
│   ├── test884.js
│   ├── test895.js
│   ├── test897.js
│   ├── test925.js
│   ├── test941.js
│   ├── test942.js
│   └── worker.html
├── tslint.json
└── types/
    └── alasql.d.ts
Download .txt
SYMBOL INDEX (1911 symbols across 74 files)

FILE: bin/alasql-cli.js
  function isPipeData (line 67) | function isPipeData(sql) {
  function pipeIsSQL (line 72) | function pipeIsSQL() {
  function loadSqlFile (line 85) | function loadSqlFile(filePath) {
  function main (line 98) | function main() {
  function execute (line 135) | function execute(sql, params) {
  function isDirectory (line 199) | function isDirectory(filePath) {
  function formatOutput (line 216) | function formatOutput(obj) {

FILE: examples/angular/import-export-excel/import-export-to-excel.factory.js
  function ImportExportToExcel (line 6) | function ImportExportToExcel(alasql, $log, $rootScope) {

FILE: examples/angular/import-export-excel/import-from-excel.directive.js
  function importFromExcel (line 6) | function importFromExcel(ImportExportToExcel) {

FILE: examples/angular/import-export-excel/test.controller.js
  function TestController (line 7) | function TestController($scope, ImportExportToExcel) {

FILE: examples/precompile/build/myCode.bundle.js
  function sign (line 28) | function sign(x) {
  function evenRound (line 31) | function evenRound(x) {
  function createNumberConversion (line 38) | function createNumberConversion(bitLength, typeOpts) {
  function normalize (line 8399) | function normalize(str) {
  function findStatus (line 8407) | function findStatus(val) {
  function countSymbols (line 8424) | function countSymbols(string) {
  function mapChars (line 8427) | function mapChars(domain_name, useSTD3, processing_option) {
  function validateLabel (line 8477) | function validateLabel(label, processing_option) {
  function processing (line 8511) | function processing(domain_name, useSTD3, processing_option) {
  function countSymbols (line 8579) | function countSymbols(str) {
  function at (line 8582) | function at(input, idx) {
  function isASCIIDigit (line 8586) | function isASCIIDigit(c) {
  function isASCIIAlpha (line 8589) | function isASCIIAlpha(c) {
  function isASCIIAlphanumeric (line 8592) | function isASCIIAlphanumeric(c) {
  function isASCIIHex (line 8595) | function isASCIIHex(c) {
  function isSingleDot (line 8598) | function isSingleDot(buffer) {
  function isDoubleDot (line 8601) | function isDoubleDot(buffer) {
  function isWindowsDriveLetterCodePoints (line 8605) | function isWindowsDriveLetterCodePoints(cp1, cp2) {
  function isWindowsDriveLetterString (line 8608) | function isWindowsDriveLetterString(string) {
  function isNormalizedWindowsDriveLetterString (line 8615) | function isNormalizedWindowsDriveLetterString(string) {
  function containsForbiddenHostCodePoint (line 8618) | function containsForbiddenHostCodePoint(string) {
  function containsForbiddenHostCodePointExcludingPercent (line 8621) | function containsForbiddenHostCodePointExcludingPercent(string) {
  function isSpecialScheme (line 8624) | function isSpecialScheme(scheme) {
  function isSpecial (line 8627) | function isSpecial(url) {
  function defaultPort (line 8630) | function defaultPort(scheme) {
  function percentEncode (line 8633) | function percentEncode(c) {
  function utf8PercentEncode (line 8640) | function utf8PercentEncode(c) {
  function utf8PercentDecode (line 8648) | function utf8PercentDecode(str) {
  function isC0ControlPercentEncode (line 8663) | function isC0ControlPercentEncode(c) {
  function isPathPercentEncode (line 8667) | function isPathPercentEncode(c) {
  function isUserinfoPercentEncode (line 8671) | function isUserinfoPercentEncode(c) {
  function percentEncodeChar (line 8674) | function percentEncodeChar(c, encodeSetPredicate) {
  function parseIPv4Number (line 8681) | function parseIPv4Number(input) {
  function parseIPv4 (line 8699) | function parseIPv4(input) {
  function serializeIPv4 (line 8736) | function serializeIPv4(address) {
  function parseIPv6 (line 8748) | function parseIPv6(input) {
  function serializeIPv6 (line 8853) | function serializeIPv6(address) {
  function parseHost (line 8877) | function parseHost(input, isSpecialArg) {
  function parseOpaqueHost (line 8901) | function parseOpaqueHost(input) {
  function findLongestZeroSequence (line 8912) | function findLongestZeroSequence(arr) {
  function serializeHost (line 8941) | function serializeHost(host) {
  function trimControlChars (line 8950) | function trimControlChars(url) {
  function trimTabAndNewline (line 8953) | function trimTabAndNewline(url) {
  function shortenPath (line 8956) | function shortenPath(url) {
  function includesCredentials (line 8966) | function includesCredentials(url) {
  function cannotHaveAUsernamePasswordPort (line 8969) | function cannotHaveAUsernamePasswordPort(url) {
  function isNormalizedWindowsDriveLetter (line 8972) | function isNormalizedWindowsDriveLetter(string) {
  function URLStateMachine (line 8975) | function URLStateMachine(input, base, encodingOverride, url, stateOverri...
  function serializeURL (line 9592) | function serializeURL(url, excludeFragment) {
  function serializeOrigin (line 9625) | function serializeOrigin(tuple) {
  method constructor (line 9709) | constructor(constructorArgs) {
  method href (line 9725) | get href() {
  method href (line 9728) | set href(v) {
  method origin (line 9735) | get origin() {
  method protocol (line 9738) | get protocol() {
  method protocol (line 9741) | set protocol(v) {
  method username (line 9744) | get username() {
  method username (line 9747) | set username(v) {
  method password (line 9753) | get password() {
  method password (line 9756) | set password(v) {
  method host (line 9762) | get host() {
  method host (line 9772) | set host(v) {
  method hostname (line 9778) | get hostname() {
  method hostname (line 9784) | set hostname(v) {
  method port (line 9790) | get port() {
  method port (line 9796) | set port(v) {
  method pathname (line 9806) | get pathname() {
  method pathname (line 9815) | set pathname(v) {
  method search (line 9822) | get search() {
  method search (line 9828) | set search(v) {
  method hash (line 9838) | get hash() {
  method hash (line 9844) | set hash(v) {
  method toJSON (line 9853) | toJSON() {
  function URL2 (line 9865) | function URL2(url) {
  method get (line 9897) | get() {
  method set (line 9900) | set(V) {
  method get (line 9914) | get() {
  method get (line 9921) | get() {
  method set (line 9924) | set(V) {
  method get (line 9932) | get() {
  method set (line 9935) | set(V) {
  method get (line 9943) | get() {
  method set (line 9946) | set(V) {
  method get (line 9954) | get() {
  method set (line 9957) | set(V) {
  method get (line 9965) | get() {
  method set (line 9968) | set(V) {
  method get (line 9976) | get() {
  method set (line 9979) | set(V) {
  method get (line 9987) | get() {
  method set (line 9990) | set(V) {
  method get (line 9998) | get() {
  method set (line 10001) | set(V) {
  method get (line 10009) | get() {
  method set (line 10012) | set(V) {
  method is (line 10020) | is(obj) {
  method create (line 10023) | create(constructorArgs, privateData) {
  method setup (line 10028) | setup(obj, constructorArgs, privateData) {
  function _interopDefault (line 10058) | function _interopDefault(ex) {
  class Blob2 (line 10071) | class Blob2 {
    method constructor (line 10072) | constructor() {
    method size (line 10105) | get size() {
    method type (line 10108) | get type() {
    method text (line 10111) | text() {
    method arrayBuffer (line 10114) | arrayBuffer() {
    method stream (line 10119) | stream() {
    method toString (line 10126) | toString() {
    method slice (line 10129) | slice() {
  function FetchError (line 10167) | function FetchError(message, type, systemError) {
  function Body (line 10187) | function Body(body) {
  method body (line 10230) | get body() {
  method bodyUsed (line 10233) | get bodyUsed() {
  method arrayBuffer (line 10236) | arrayBuffer() {
  method blob (line 10241) | blob() {
  method json (line 10254) | json() {
  method text (line 10269) | text() {
  method buffer (line 10274) | buffer() {
  method textConverted (line 10277) | textConverted() {
  function consumeBody (line 10300) | function consumeBody() {
  function convertBody (line 10385) | function convertBody(buffer, headers) {
  function isURLSearchParams (line 10424) | function isURLSearchParams(obj) {
  function isBlob (line 10442) | function isBlob(obj) {
  function clone (line 10454) | function clone(instance) {
  function extractContentType (line 10470) | function extractContentType(body) {
  function getTotalBytes (line 10493) | function getTotalBytes(instance) {
  function writeToStream (line 10513) | function writeToStream(dest, instance) {
  function validateName (line 10529) | function validateName(name) {
  function validateValue (line 10535) | function validateValue(value) {
  function find (line 10541) | function find(map, name) {
  class Headers (line 10552) | class Headers {
    method constructor (line 10553) | constructor() {
    method get (line 10596) | get(name) {
    method forEach (line 10605) | forEach(callback) {
    method set (line 10618) | set(name, value) {
    method append (line 10626) | append(name, value) {
    method has (line 10638) | has(name) {
    method delete (line 10643) | delete(name) {
    method raw (line 10651) | raw() {
    method keys (line 10654) | keys() {
    method values (line 10657) | values() {
  method [Symbol.iterator] (line 10660) | [Symbol.iterator]() {
  function getHeaders (line 10682) | function getHeaders(headers) {
  function createHeadersIterator (line 10700) | function createHeadersIterator(target, kind) {
  method next (line 10711) | next() {
  function exportNodeCompatibleHeaders (line 10740) | function exportNodeCompatibleHeaders(headers) {
  function createHeadersLenient (line 10748) | function createHeadersLenient(obj) {
  class Response (line 10774) | class Response {
    method constructor (line 10775) | constructor() {
    method url (line 10795) | get url() {
    method status (line 10798) | get status() {
    method ok (line 10801) | get ok() {
    method redirected (line 10804) | get redirected() {
    method statusText (line 10807) | get statusText() {
    method headers (line 10810) | get headers() {
    method clone (line 10813) | clone() {
  function parseURL (line 10844) | function parseURL(urlStr) {
  function isRequest (line 10851) | function isRequest(input) {
  function isAbortSignal (line 10854) | function isAbortSignal(signal) {
  class Request (line 10859) | class Request {
    method constructor (line 10860) | constructor(input) {
    method method (line 10921) | get method() {
    method url (line 10924) | get url() {
    method headers (line 10927) | get headers() {
    method redirect (line 10930) | get redirect() {
    method signal (line 10933) | get signal() {
    method clone (line 10936) | clone() {
  function getNodeRequestOptions (line 10955) | function getNodeRequestOptions(request) {
  function AbortError (line 11001) | function AbortError(message) {
  function fetch2 (line 11022) | function fetch2(url, opts) {
  function fixResponseChunkedTransferBadEnding (line 11260) | function fixResponseChunkedTransferBadEnding(request, errorCallback) {
  function destroyStream (line 11279) | function destroyStream(stream, err2) {
  function make_xlsx_lib (line 16641) | function make_xlsx_lib(XLSX2) {
  function popStack (line 71800) | function popStack(n) {
  function Parser (line 73715) | function Parser() {
  function n2u (line 73748) | function n2u(s) {
  function und (line 73751) | function und(s, r) {
  function returnTrue (line 73754) | function returnTrue() {
  function returnUndefined (line 73757) | function returnUndefined() {}
  function fetchData (line 73958) | async function fetchData(path, success, error, async) {
  function getData (line 73964) | function getData(path, success, error) {
  function getBinaryData (line 73976) | function getBinaryData(path, success, error) {
  function cleanupCache (line 74683) | function cleanupCache(statement) {
  function adrunone (line 74786) | function adrunone(data) {
  class Transaction (line 75218) | class Transaction {
    method constructor (line 75222) | constructor(databaseid) {
    method commit (line 75227) | commit() {
    method rollback (line 75232) | rollback() {
    method exec (line 75240) | exec(sql, params, cb) {
  class View (line 75276) | class View {
    method constructor (line 75277) | constructor(params) {
  class Query (line 75286) | class Query {
    method constructor (line 75287) | constructor(params) {
  class Recordset (line 75297) | class Recordset {
    method constructor (line 75298) | constructor(params) {
  class Base (line 75305) | class Base {
    method constructor (line 75306) | constructor(params) {
    method toString (line 75309) | toString() {}
    method toType (line 75310) | toType() {}
    method toJS (line 75311) | toJS() {}
    method exec (line 75312) | exec() {}
    method compile (line 75313) | compile() {}
  method constructor (line 75322) | constructor(params) {
  method toString (line 75325) | toString() {
  method compile (line 75328) | compile(db) {
  method constructor (line 75340) | constructor(params) {
  method toString (line 75343) | toString() {
  method toJS (line 75349) | toJS(context) {
  method compile (line 75353) | compile(databaseid) {
  method #doSearch (line 75366) | #doSearch(databaseid, params, cb) {
  method PROP (line 75911) | PROP(val, args, stope) {
  method APROP (line 75931) | APROP(val, args) {
  method EQ (line 75943) | EQ(val, args, stope, params) {
  method LIKE (line 75952) | LIKE(val, args, stope, params) {
  method ATTR (line 75975) | ATTR(val, args, stope) {
  method CONTENT (line 75994) | CONTENT(val, args, stope) {
  method SHARP (line 76000) | SHARP(val, args) {
  method PARENT (line 76008) | PARENT() {
  method CHILD (line 76012) | CHILD(val, args, stope) {
  method KEYS (line 76037) | KEYS(val) {
  method WHERE (line 76044) | WHERE(val, args, stope, params) {
  method NAME (line 76053) | NAME(val, args) {
  method CLASS (line 76060) | CLASS(val, args) {
  method VERTEX (line 76067) | VERTEX(val) {
  method INSTANCEOF (line 76074) | INSTANCEOF(val, args) {
  method EDGE (line 76081) | EDGE(val) {
  method EX (line 76088) | EX(val, args, stope, params) {
  method RETURN (line 76093) | RETURN(val, args, stope, params) {
  method REF (line 76107) | REF(val) {
  method OUT (line 76110) | OUT(val) {
  method OUTOUT (line 76120) | OUTOUT(val) {
  method IN (line 76136) | IN(val) {
  method ININ (line 76146) | ININ(val) {
  method AS (line 76162) | AS(val, args) {
  method AT (line 76166) | AT(val, args) {
  method CLONEDEEP (line 76170) | CLONEDEEP(val) {
  method SET (line 76174) | SET(val, args, stope, params) {
  method ROW (line 76190) | ROW(val, args, stope, params) {
  method D3 (line 76198) | D3(val) {
  method ORDERBY (line 76205) | ORDERBY(val, args) {
  function queryfn (line 76282) | function queryfn(query, oldscope, cb, A, B) {
  function queryfn2 (line 76322) | function queryfn2(data, idx, query) {
  function queryfn3 (line 76341) | function queryfn3(query) {
  function doLimit (line 76564) | function doLimit(query) {
  function doDistinct (line 76580) | function doDistinct(query) {
  function doJoin (line 76722) | function doJoin(query, scope, h) {
  function swapSources (line 76847) | function swapSources(query, h) {
  method constructor (line 76869) | constructor(params) {
  method toString (line 76872) | toString() {
  method toJS (line 76993) | toJS(context) {
  method compile (line 77002) | compile(databaseid, params) {
  method execute (line 77149) | execute(databaseid, params, cb) {
  method compileWhereExists (line 77152) | compileWhereExists(query) {
  method compileQueries (line 77160) | compileQueries(query) {
  function modify (line 77169) | function modify(query, res) {
  method constructor (line 77243) | constructor(params) {
  method toString (line 77246) | toString() {
  method toType (line 77249) | toType() {
  method toJS (line 77252) | toJS(context, tableid, defcols) {
  function optimizeWhereJoin (line 77733) | function optimizeWhereJoin(query, ast) {
  function compileSelectStar (line 78189) | function compileSelectStar(query, aliases, joinstar) {
  function decartes (line 78962) | function decartes(gv, query) {
  method constructor (line 79076) | constructor(params) {
  method toString (line 79079) | toString() {
  method compile (line 79082) | compile(tableid) {
  method constructor (line 79087) | constructor(params) {
  method toString (line 79090) | toString() {
  method constructor (line 79099) | constructor(params) {
  method toString (line 79102) | toString() {
  class ExpressionStatement (line 79118) | class ExpressionStatement {
    method constructor (line 79119) | constructor(params) {
    method toString (line 79122) | toString() {
    method execute (line 79125) | execute(databaseid, params, cb) {
  class Expression (line 79141) | class Expression {
    method constructor (line 79142) | constructor(params) {
    method toString (line 79145) | toString() {
    method findAggregator (line 79158) | findAggregator(query) {
    method toJS (line 79163) | toJS(context, tableid, defcols) {
    method compile (line 79169) | compile(context, tableid, defcols) {
  class JavaScript (line 79177) | class JavaScript {
    method constructor (line 79178) | constructor(params) {
    method toString (line 79181) | toString() {
    method toJS (line 79185) | toJS() {
    method execute (line 79188) | execute(databaseid, params, cb) {
  class Literal (line 79199) | class Literal {
    method constructor (line 79200) | constructor(params) {
    method toString (line 79203) | toString() {
  class Join (line 79212) | class Join {
    method constructor (line 79213) | constructor(params) {
    method toString (line 79216) | toString() {
  class Table2 (line 79226) | class Table2 {
    method constructor (line 79227) | constructor(params) {
    method toString (line 79230) | toString() {
  class View2 (line 79239) | class View2 {
    method constructor (line 79240) | constructor(params) {
    method toString (line 79243) | toString() {
  class Op (line 79279) | class Op {
    method constructor (line 79280) | constructor(params) {
    method toString (line 79283) | toString() {
    method findAggregator (line 79303) | findAggregator(query) {
    method toType (line 79311) | toType(tableid) {
    method toJS (line 79328) | toJS(context, tableid, defcols) {
  class VarValue (line 79507) | class VarValue {
    method constructor (line 79508) | constructor(params) {
    method toString (line 79511) | toString() {
    method toType (line 79514) | toType() {
    method toJS (line 79517) | toJS() {
  class NumValue (line 79522) | class NumValue {
    method constructor (line 79523) | constructor(params) {
    method toString (line 79526) | toString() {
    method toType (line 79529) | toType() {
    method toJS (line 79532) | toJS() {
  class StringValue (line 79537) | class StringValue {
    method constructor (line 79538) | constructor(params) {
    method toString (line 79541) | toString() {
    method toType (line 79544) | toType() {
    method toJS (line 79547) | toJS() {
  class DomainValueValue (line 79552) | class DomainValueValue {
    method constructor (line 79553) | constructor(params) {
    method toString (line 79556) | toString() {
    method toType (line 79559) | toType() {
    method toJS (line 79562) | toJS(context, tableid, defcols) {
  class ArrayValue (line 79567) | class ArrayValue {
    method constructor (line 79568) | constructor(params) {
    method toString (line 79571) | toString() {
    method toType (line 79574) | toType() {
    method toJS (line 79577) | toJS(context, tableid, defcols) {
  class LogicValue (line 79590) | class LogicValue {
    method constructor (line 79591) | constructor(params) {
    method toString (line 79594) | toString() {
    method toType (line 79597) | toType() {
    method toJS (line 79600) | toJS() {
  class NullValue (line 79605) | class NullValue {
    method constructor (line 79606) | constructor(params) {
    method toString (line 79609) | toString() {
    method toJS (line 79612) | toJS() {
  class ParamValue (line 79617) | class ParamValue {
    method constructor (line 79618) | constructor(params) {
    method toString (line 79621) | toString() {
    method toJS (line 79624) | toJS() {
  class UniOp (line 79638) | class UniOp {
    method constructor (line 79639) | constructor(params) {
    method toString (line 79642) | toString() {
    method findAggregator (line 79657) | findAggregator(query) {
    method toType (line 79662) | toType() {
    method toJS (line 79673) | toJS(context, tableid, defcols) {
  class Column (line 79688) | class Column {
    method constructor (line 79689) | constructor(params) {
    method toString (line 79692) | toString() {
    method toJS (line 79705) | toJS(context, tableid, defcols) {
  class AggrValue (line 79748) | class AggrValue {
    method constructor (line 79749) | constructor(params) {
    method toString (line 79752) | toString() {
    method findAggregator (line 79762) | findAggregator(query) {
    method toType (line 79772) | toType() {
    method toJS (line 79785) | toJS() {
  class OrderExpression (line 79794) | class OrderExpression {
    method constructor (line 79795) | constructor(params) {
  class GroupExpression (line 79801) | class GroupExpression {
    method constructor (line 79802) | constructor(params) {
    method toString (line 79805) | toString() {
  function JSONtoJS (line 80431) | function JSONtoJS(obj, context, tableid, defcols) {
  function structuredDate (line 80485) | function structuredDate(unFormattedDate) {
  function newDate (line 81308) | function newDate(d) {
  function findVertex (line 81589) | function findVertex(name) {
  function createVertex (line 81598) | function createVertex(g) {
  function runone (line 82029) | function runone() {
  function loghtml (line 83097) | function loghtml(res) {
  function scrollTo (line 83145) | function scrollTo(element, to, duration) {
  function toHTML (line 83560) | function toHTML() {
  function style (line 83769) | function style(a) {
  function toXML (line 83800) | function toXML() {
  function doExport (line 84058) | function doExport() {
  function prepareSheet (line 84070) | function prepareSheet(opts2, data2, columns2, idx) {
  function saveWorkbook (line 84135) | function saveWorkbook(cb2) {
  function parseText (line 84329) | function parseText(text) {
  function XLSXLSX (line 84470) | function XLSXLSX(X, filename, opts, cb, idx, query) {
  function xmlparse (line 84615) | function xmlparse(xml) {
  function _databaseExists (line 84833) | async function _databaseExists(name) {
  function wait (line 85641) | function wait() {

FILE: modules/xlsx/dist/cpexcel.d.ts
  type CP$Index (line 5) | type CP$Index = number | string;
  type CP$Conv (line 8) | interface CP$Conv {
  type CP$String (line 14) | type CP$String = string | string[] | Uint8Array;
  type CP$Data (line 17) | type CP$Data = string | number[] | Uint8Array;
  type CP$Utils (line 20) | interface CP$Utils {
  type CP$Module (line 28) | interface CP$Module {

FILE: modules/xlsx/dist/xlsx.extendscript.js
  function p (line 66) | function p(n,i) { return ('0000000' + n).slice(-(i||2)); }
  function fix_data (line 127) | function fix_data(data) {
  function fix_data (line 143) | function fix_data(data) {
  function make_xlsx_lib (line 162) | function make_xlsx_lib(XLSX){

FILE: modules/xlsx/types/index.d.ts
  constant SSF (line 11) | const SSF: any;
  constant CFB (line 15) | const CFB: any;
  type CBFunc (line 31) | type CBFunc = () => void;
  type NumberFormat (line 44) | type NumberFormat = string | number;
  type WSSpec (line 47) | type WSSpec = string | number | WorkSheet;
  type RangeSpec (line 50) | type RangeSpec = string | Range | CellAddress;
  type Properties (line 53) | interface Properties {
  type FullProperties (line 77) | interface FullProperties extends Properties {
  type CommonOptions (line 96) | interface CommonOptions {
  type DateNFOption (line 137) | interface DateNFOption {
  type ParsingOptions (line 143) | interface ParsingOptions extends CommonOptions {
  type WritingOptions (line 244) | interface WritingOptions extends CommonOptions {
  type WorkBook (line 300) | interface WorkBook {
  type SheetProps (line 324) | interface SheetProps {
  type DefinedName (line 336) | interface DefinedName {
  type WBProps (line 351) | interface WBProps {
  type WBView (line 366) | interface WBView {
  type WorkbookProperties (line 372) | interface WorkbookProperties {
  type DBFField (line 384) | interface DBFField {
  type ColInfo (line 399) | interface ColInfo {
  type RowInfo (line 427) | interface RowInfo {
  type ProtectInfo (line 448) | interface ProtectInfo {
  type MarginInfo (line 532) | interface MarginInfo {
  type SheetType (line 546) | type SheetType = 'sheet' | 'chart';
  type SheetKeys (line 547) | type SheetKeys = string | MarginInfo | SheetType;
  type Sheet (line 549) | interface Sheet {
  type DenseSheet (line 574) | interface DenseSheet extends Sheet {
  type SparseSheet (line 589) | interface SparseSheet extends Sheet {
  type AutoFilterInfo (line 599) | interface AutoFilterInfo {
  type WSKeys (line 604) | type WSKeys = SheetKeys | ColInfo[] | RowInfo[] | Range[] | ProtectInfo ...
  type WorkSheet (line 607) | interface WorkSheet extends Sheet {
  type DenseWorkSheet (line 630) | interface DenseWorkSheet extends DenseSheet {
  type StrictWS (line 644) | interface StrictWS { [addr: string]: CellObject; }
  type ExcelDataType (line 650) | type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
  type BookType (line 656) | type BookType = 'xlsx' | 'xlsm' | 'xlsb' | 'xls' | 'xla' | 'biff8' | 'bi...
  type Comment (line 659) | interface Comment {
  type Comments (line 671) | interface Comments extends Array<Comment> {
  type Hyperlink (line 677) | interface Hyperlink {
  type CellObject (line 686) | interface CellObject {
  type CellAddress (line 728) | interface CellAddress {
  type Range (line 736) | interface Range {
  type Sheet2CSVOpts (line 743) | interface Sheet2CSVOpts extends DateNFOption {
  type OriginOption (line 766) | interface OriginOption {
  type Sheet2HTMLOpts (line 771) | interface Sheet2HTMLOpts {
  type Sheet2JSONOpts (line 785) | interface Sheet2JSONOpts extends DateNFOption {
  type AOA2SheetOpts (line 808) | interface AOA2SheetOpts extends CommonOptions, DateNFOption {
  type SheetAOAOpts (line 816) | interface SheetAOAOpts extends AOA2SheetOpts, OriginOption {}
  type JSON2SheetOpts (line 818) | interface JSON2SheetOpts extends CommonOptions, DateNFOption, OriginOpti...
  type Table2SheetOpts (line 826) | interface Table2SheetOpts extends CommonOptions, DateNFOption, OriginOpt...
  type Table2BookOpts (line 846) | interface Table2BookOpts extends Table2SheetOpts {
  type XLSX$Utils (line 855) | interface XLSX$Utils {
  type XLSX$Consts (line 967) | interface XLSX$Consts {
  type StreamUtils (line 981) | interface StreamUtils {

FILE: modules/xlsx/xlsx.js
  function make_xlsx_lib (line 6) | function make_xlsx_lib(XLSX){

FILE: modules/xlsx/xlsx.mjs
  function reset_ansi (line 38) | function reset_ansi() { set_ansi(1252); }
  function reset_cp (line 41) | function reset_cp() { set_cp(1200); reset_ansi(); }
  function char_codes (line 43) | function char_codes(data/*:string*/)/*:Array<number>*/ { var o/*:Array<n...
  function utf16leread (line 45) | function utf16leread(data/*:string*/)/*:string*/ {
  function utf16lereadu (line 50) | function utf16lereadu(data/*:Uint8Array*/)/*:string*/ {
  function utf16beread (line 55) | function utf16beread(data/*:string*/)/*:string*/ {
  function set_cptable (line 72) | function set_cptable(cptable) {
  function Base64_encode (line 91) | function Base64_encode(input) {
  function Base64_encode_pass (line 111) | function Base64_encode_pass(input) {
  function Base64_decode (line 137) | function Base64_decode(input) {
  function new_raw_buf (line 178) | function new_raw_buf(len/*:number*/) {
  function new_unsafe_buf (line 185) | function new_unsafe_buf(len/*:number*/) {
  function s2ab (line 197) | function s2ab(s/*:string*/)/*:any*/ {
  function a2s (line 204) | function a2s(data/*:any*/)/*:string*/ {
  function a2u (line 209) | function a2u(data/*:Array<number>*/)/*:Uint8Array*/ {
  function ab2a (line 214) | function ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array<number>*/ {
  function utf8decode (line 240) | function utf8decode(content/*:string*/) {
  function _strrev (line 293) | function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; ...
  function pad0 (line 294) | function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.le...
  function pad_ (line 295) | function pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v;return t.len...
  function rpad_ (line 296) | function rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.l...
  function pad0r1 (line 297) | function pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=""+Math.round(v...
  function pad0r2 (line 298) | function pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t....
  function pad0r (line 300) | function pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) ...
  function SSF_isgeneral (line 302) | function SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i ...
  function SSF_init_table (line 326) | function SSF_init_table(t/*:any*/) {
  function SSF_frac (line 446) | function SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Arra...
  function SSF_parse_date_code (line 466) | function SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {
  function datenum_local (line 499) | function datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {
  function SSF_strip_decimal (line 508) | function SSF_strip_decimal(o/*:string*/)/*:string*/ {
  function SSF_normalize_exp (line 513) | function SSF_normalize_exp(o/*:string*/)/*:string*/ {
  function SSF_small_exp (line 519) | function SSF_small_exp(v/*:number*/)/*:string*/ {
  function SSF_large_exp (line 527) | function SSF_large_exp(v/*:number*/)/*:string*/ {
  function SSF_general_num (line 532) | function SSF_general_num(v/*:number*/)/*:string*/ {
  function SSF_general (line 554) | function SSF_general(v/*:any*/, opts/*:any*/) {
  function SSF_fix_hijri (line 567) | function SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {
  function SSF_write_date (line 575) | function SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?num...
  function commaify (line 643) | function commaify(s/*:string*/)/*:string*/ {
  function write_num_pct (line 651) | function write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/...
  function write_num_cm (line 656) | function write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*...
  function write_num_exp (line 662) | function write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{
  function write_num_f1 (line 689) | function write_num_f1(r/*:Array<string>*/, aval/*:number*/, sign/*:strin...
  function write_num_f2 (line 694) | function write_num_f2(r/*:Array<string>*/, aval/*:number*/, sign/*:strin...
  function hashq (line 700) | function hashq(str/*:string*/)/*:string*/ {
  function rnd (line 710) | function rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.po...
  function dec (line 711) | function dec(val/*:number*/, d/*:number*/)/*:number*/ {
  function carry (line 716) | function carry(val/*:number*/, d/*:number*/)/*:number*/ {
  function flr (line 722) | function flr(val/*:number*/)/*:string*/ {
  function write_num_flt (line 726) | function write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/...
  function write_num_cm2 (line 811) | function write_num_cm2(type/*:string*/, fmt/*:string*/, val/*:number*/)/...
  function write_num_pct2 (line 816) | function write_num_pct2(type/*:string*/, fmt/*:string*/, val/*:number*/)...
  function write_num_exp2 (line 820) | function write_num_exp2(fmt/*:string*/, val/*:number*/)/*:string*/{
  function write_num_int (line 842) | function write_num_int(type/*:string*/, fmt/*:string*/, val/*:number*/)/...
  function write_num (line 928) | function write_num(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:st...
  function SSF_split_fmt (line 931) | function SSF_split_fmt(fmt/*:string*/)/*:Array<string>*/ {
  function fmt_is_date (line 949) | function fmt_is_date(fmt/*:string*/)/*:boolean*/ {
  function eval_fmt (line 991) | function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number...
  function chkcond (line 1200) | function chkcond(v, rr) {
  function choose_fmt (line 1213) | function choose_fmt(f/*:string*/, v/*:any*/) {
  function SSF_format (line 1234) | function SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {
  function SSF_load (line 1257) | function SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {
  function SSF_load_table (line 1273) | function SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {
  function make_ssf (line 1278) | function make_ssf() {
  function dateNF_regex (line 1334) | function dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {
  function dateNF_fix (line 1339) | function dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array<str...
  function SSF__load (line 1364) | function SSF__load(fmt, idx) {
  function signed_crc_table (line 1414) | function signed_crc_table()/*:any*/ {
  function slice_by_16_tables (line 1434) | function slice_by_16_tables(T) {
  function crc32_bstr (line 1450) | function crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {
  function crc32_buf (line 1456) | function crc32_buf(B/*:Uint8Array|Array<number>*/, seed/*:number*/)/*:nu...
  function crc32_str (line 1471) | function crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {
  function namecmp (line 1505) | function namecmp(l/*:string*/, r/*:string*/)/*:number*/ {
  function dirname (line 1513) | function dirname(p/*:string*/)/*:string*/ {
  function filename (line 1519) | function filename(p/*:string*/)/*:string*/ {
  function write_dos_date (line 1532) | function write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {
  function parse_dos_date (line 1545) | function parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {
  function parse_extra_field (line 1562) | function parse_extra_field(blob/*:CFBlob*/)/*:any*/ {
  function get_fs (line 1597) | function get_fs() { return fs || (fs = _fs); }
  function parse (line 1598) | function parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContaine...
  function check_get_mver (line 1700) | function check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {
  function check_shifts (line 1714) | function check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {
  function sectorify (line 1736) | function sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array<RawBytes>*/ {
  function build_full_paths (line 1745) | function build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Pat...
  function get_mfat_entry (line 1783) | function get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*...
  function sleuth_fat (line 1799) | function sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array<RawB...
  function get_sector_list (line 1815) | function get_sector_list(sectors/*:Array<RawBytes>*/, start/*:number*/, ...
  function make_sector_list (line 1833) | function make_sector_list(sectors/*:Array<RawBytes>*/, dir_start/*:numbe...
  function read_directory (line 1861) | function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/...
  function read_date (line 1912) | function read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {
  function read_file (line 1916) | function read_file(filename/*:string*/, options/*:CFBReadOpts*/) {
  function read (line 1921) | function read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {
  function init_cfb (line 1934) | function init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {
  function seed_cfb (line 1946) | function seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {
  function rebuild_cfb (line 1954) | function rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {
  function _write (line 2035) | function _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawByt...
  function find (line 2197) | function find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {
  function write_file (line 2242) | function write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*...
  function a2s (line 2249) | function a2s(o/*:RawBytes*/)/*:string*/ {
  function write (line 2255) | function write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawByte...
  function use_zlib (line 2269) | function use_zlib(zlib) { try {
  function _inflateRawSync (line 2277) | function _inflateRawSync(payload, usz) {
  function _deflateRawSync (line 2286) | function _deflateRawSync(payload) {
  function bit_swap_8 (line 2297) | function bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<...
  function bit_swap_n (line 2304) | function bit_swap_n(n, b) {
  function read_bits_2 (line 2314) | function read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((b...
  function read_bits_3 (line 2315) | function read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((b...
  function read_bits_4 (line 2316) | function read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((b...
  function read_bits_5 (line 2317) | function read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((b...
  function read_bits_7 (line 2318) | function read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((b...
  function read_bits_n (line 2321) | function read_bits_n(buf, bl, n) {
  function write_bits_3 (line 2334) | function write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;
  function write_bits_1 (line 2343) | function write_bits_1(buf, bl, v) {
  function write_bits_8 (line 2349) | function write_bits_8(buf, bl, v) {
  function write_bits_16 (line 2356) | function write_bits_16(buf, bl, v) {
  function realloc (line 2366) | function realloc(b, sz/*:number*/) {
  function zero_fill_array (line 2386) | function zero_fill_array(n) {
  function build_tree (line 2393) | function build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {
  function write_stored (line 2463) | function write_stored(data, out) {
  function write_huff_fixed (line 2477) | function write_huff_fixed(data, out) {
  function _deflate (line 2562) | function _deflate(data) {
  function dyn (line 2575) | function dyn(data, boff/*:number*/) {
  function inflate (line 2648) | function inflate(data, usz/*:number*/) {
  function _inflate (line 2726) | function _inflate(payload, usz) {
  function warn_or_throw (line 2733) | function warn_or_throw(wrn, msg) {
  function parse_zip (line 2738) | function parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBCont...
  function parse_local_file (line 2792) | function parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*...
  function write_zip (line 2847) | function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:Raw...
  function get_content_type (line 2965) | function get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {
  function write_base64_76 (line 2980) | function write_base64_76(bstr/*:string*/)/*:string*/ {
  function write_quoted_printable (line 3001) | function write_quoted_printable(text/*:string*/)/*:string*/ {
  function parse_quoted_printable (line 3031) | function parse_quoted_printable(data/*:Array<string>*/)/*:RawBytes*/ {
  function parse_mime (line 3047) | function parse_mime(cfb/*:CFBContainer*/, data/*:Array<string>*/, root/*...
  function parse_mad (line 3070) | function parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBCont...
  function write_mad (line 3111) | function write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:str...
  function cfb_new (line 3158) | function cfb_new(opts/*:?any*/)/*:CFBContainer*/ {
  function cfb_add (line 3164) | function cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBy...
  function cfb_del (line 3191) | function cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {
  function cfb_mov (line 3202) | function cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:s...
  function cfb_gc (line 3213) | function cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }
  function set_fs (line 3240) | function set_fs(fs) { _fs = fs; }
  function blobify (line 3243) | function blobify(data) {
  function write_dl (line 3249) | function write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {
  function read_binary (line 3299) | function read_binary(path/*:string*/) {
  function keys (line 3311) | function keys(o/*:any*/)/*:Array<any>*/ {
  function evert_key (line 3317) | function evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {
  function evert (line 3323) | function evert(obj/*:any*/)/*:EvertType*/ {
  function evert_num (line 3329) | function evert_num(obj/*:any*/)/*:EvertNumType*/ {
  function evert_arr (line 3335) | function evert_arr(obj/*:any*/)/*:EvertArrType*/ {
  function datenum (line 3345) | function datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {
  function numdate (line 3354) | function numdate(v/*:number*/)/*:Date*/ {
  function parse_isodur (line 3364) | function parse_isodur(s) {
  function parseDate (line 3394) | function parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {
  function cc2str (line 3414) | function cc2str(arr/*:Array<number>*/, debomit)/*:string*/ {
  function dup (line 3447) | function dup(o/*:any*/)/*:any*/ {
  function fill (line 3456) | function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(...
  function fuzzynum (line 3459) | function fuzzynum(s/*:string*/)/*:number*/ {
  function fuzzytime1 (line 3474) | function fuzzytime1(M) /*:Date*/ {
  function fuzzydate (line 3485) | function fuzzydate(s/*:string*/)/*:Date*/ {
  function getdatastr (line 3511) | function getdatastr(data)/*:?string*/ {
  function getdatabin (line 3521) | function getdatabin(data) {
  function getdata (line 3534) | function getdata(data) { return (data && data.name.slice(-4) === ".bin")...
  function safegetzipfile (line 3538) | function safegetzipfile(zip, file/*:string*/) {
  function getzipfile (line 3548) | function getzipfile(zip, file/*:string*/) {
  function getzipdata (line 3554) | function getzipdata(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {
  function getzipstr (line 3560) | function getzipstr(zip, file/*:string*/, safe/*:?boolean*/)/*:?string*/ {
  function getzipbin (line 3566) | function getzipbin(zip, file/*:string*/, safe/*:?boolean*/)/*:any*/ {
  function zipentries (line 3572) | function zipentries(zip) {
  function zip_add_file (line 3578) | function zip_add_file(zip, path, content) {
  function zip_new (line 3593) | function zip_new() { return CFB.utils.cfb_new(); }
  function zip_read (line 3595) | function zip_read(d, o) {
  function resolve_path (line 3604) | function resolve_path(path/*:string*/, base/*:string*/)/*:string*/ {
  function parsexmltag (line 3621) | function parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?...
  function strip_ns (line 3650) | function strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, ...
  function raw_unescapexml (line 3666) | function raw_unescapexml(text/*:string*/)/*:string*/ {
  function escapexml (line 3679) | function escapexml(text/*:string*/)/*:string*/{
  function escapexmltag (line 3683) | function escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text...
  function escapehtml (line 3686) | function escapehtml(text/*:string*/)/*:string*/{
  function escapexlml (line 3691) | function escapexlml(text/*:string*/)/*:string*/{
  function entrepl (line 3699) | function entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String...
  function xlml_unfixstr (line 3702) | function xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/...
  function parsexmlbool (line 3705) | function parsexmlbool(value/*:any*/)/*:boolean*/ {
  function utf8reada (line 3714) | function utf8reada(orig/*:string*/)/*:string*/ {
  function utf8readb (line 3731) | function utf8readb(data) {
  function utf8readc (line 3748) | function utf8readc(data) { return Buffer_from(data, 'binary').toString('...
  function parseVector (line 3819) | function parseVector(data/*:string*/, opts)/*:Array<{v:string,t:string}>...
  function writetag (line 3836) | function writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f...
  function wxt_helper (line 3838) | function wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { ret...
  function writextag (line 3839) | function writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h ...
  function write_w3cdtf (line 3841) | function write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { ret...
  function write_vt (line 3843) | function write_vt(s, xlsx/*:?boolean*/)/*:string*/ {
  function xlml_normalize (line 3856) | function xlml_normalize(d)/*:string*/ {
  function read_double_le (line 3901) | function read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {
  function write_double_le (line 3912) | function write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:numb...
  function cpdoit (line 3971) | function cpdoit() {
  function ReadShift (line 3989) | function ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {
  function WriteShift (line 4078) | function WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/...
  function CheckField (line 4135) | function CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {
  function prep_blob (line 4141) | function prep_blob(blob, pos/*:number*/)/*:void*/ {
  function parsenoop (line 4148) | function parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += l...
  function new_buf (line 4150) | function new_buf(sz/*:number*/)/*:Block*/ {
  function recordhopper (line 4157) | function recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {
  function buf_array (line 4177) | function buf_array()/*:BufArray*/ {
  function write_record (line 4213) | function write_record(ba/*:BufArray*/, type/*:number*/, payload, length/...
  function shift_cell_xls (line 4232) | function shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/...
  function shift_range_xls (line 4248) | function shift_range_xls(cell, range, opts) {
  function encode_cell_xls (line 4255) | function encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {
  function encode_range_xls (line 4264) | function encode_range_xls(r, opts)/*:string*/ {
  function decode_row (line 4277) | function decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfi...
  function encode_row (line 4278) | function encode_row(row/*:number*/)/*:string*/ { return "" + (row + 1); }
  function fix_row (line 4279) | function fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-...
  function unfix_row (line 4280) | function unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\$...
  function decode_col (line 4282) | function decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(co...
  function encode_col (line 4283) | function encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new E...
  function fix_col (line 4284) | function fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A...
  function unfix_col (line 4285) | function unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\...
  function split_cell (line 4287) | function split_cell(cstr/*:string*/)/*:Array<string>*/ { return cstr.rep...
  function decode_cell (line 4288) | function decode_cell(cstr/*:string*/)/*:CellAddress*/ {
  function encode_cell (line 4297) | function encode_cell(cell/*:CellAddress*/)/*:string*/ {
  function decode_range (line 4303) | function decode_range(range/*:string*/)/*:Range*/ {
  function encode_range (line 4309) | function encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:...
  function fix_range (line 4321) | function fix_range(a1/*:string*/)/*:string*/ {
  function formula_quote_sheet_name (line 4327) | function formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {
  function safe_decode_range (line 4333) | function safe_decode_range(range/*:string*/)/*:Range*/ {
  function safe_format_cell (line 4366) | function safe_format_cell(cell/*:Cell*/, v/*:any*/) {
  function format_cell (line 4372) | function format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {
  function sheet_to_workbook (line 4381) | function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {
  function sheet_add_aoa (line 4387) | function sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/...
  function aoa_to_sheet (line 4459) | function aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { retur...
  function parse_Int32LE (line 4461) | function parse_Int32LE(data) {
  function write_UInt32LE (line 4464) | function write_UInt32LE(x/*:number*/, o) {
  function parse_XLWideString (line 4471) | function parse_XLWideString(data/*::, length*/)/*:string*/ {
  function write_XLWideString (line 4475) | function write_XLWideString(data/*:string*/, o) {
  function parse_StrRun (line 4489) | function parse_StrRun(data) {
  function write_StrRun (line 4492) | function write_StrRun(run, o) {
  function parse_RichStr (line 4500) | function parse_RichStr(data, length/*:number*/)/*:XLString*/ {
  function write_RichStr (line 4519) | function write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {
  function write_BrtCommentText (line 4528) | function write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {
  function parse_XLSBCell (line 4539) | function parse_XLSBCell(data)/*:any*/ {
  function write_XLSBCell (line 4546) | function write_XLSBCell(cell/*:any*/, o/*:?Block*/) {
  function parse_XLSBShortCell (line 4555) | function parse_XLSBShortCell(data)/*:any*/ {
  function write_XLSBShortCell (line 4561) | function write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {
  function parse_XLNullableWideString (line 4573) | function parse_XLNullableWideString(data/*::, length*/)/*:string*/ {
  function write_XLNullableWideString (line 4577) | function write_XLNullableWideString(data/*:string*/, o) {
  function parse_RkNumber (line 4594) | function parse_RkNumber(data)/*:number*/ {
  function write_RkNumber (line 4601) | function write_RkNumber(data/*:number*/, o) {
  function parse_RfX (line 4612) | function parse_RfX(data /*::, length*/)/*:Range*/ {
  function write_RfX (line 4620) | function write_RfX(r/*:Range*/, o) {
  function parse_Xnum (line 4655) | function parse_Xnum(data/*::, length*/) {
  function write_Xnum (line 4659) | function write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, d...
  function parse_BrtColor (line 4662) | function parse_BrtColor(data/*::, length*/) {
  function write_BrtColor (line 4694) | function write_BrtColor(color, o) {
  function parse_FontFlags (line 4727) | function parse_FontFlags(data/*::, length, opts*/) {
  function write_FontFlags (line 4742) | function write_FontFlags(font, o) {
  function parse_ClipboardFormatOrString (line 4757) | function parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {
  function parse_ClipboardFormatOrAnsiString (line 4769) | function parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFo...
  function parse_ClipboardFormatOrUnicodeString (line 4770) | function parse_ClipboardFormatOrUnicodeString(o) { return parse_Clipboar...
  function rgbify (line 4955) | function rgbify(arr/*:Array<number>*/)/*:Array<[number, number, number]>...
  function new_ct (line 5315) | function new_ct()/*:any*/ {
  function parse_ct (line 5324) | function parse_ct(data/*:?string*/) {
  function write_ct (line 5348) | function write_ct(ct, opts, raw)/*:string*/ {
  function get_rels_path (line 5463) | function get_rels_path(file/*:string*/)/*:string*/ {
  function parse_rels (line 5468) | function parse_rels(data/*:?string*/, currentFilePath/*:string*/) {
  function write_rels (line 5492) | function write_rels(rels)/*:string*/ {
  function add_rels (line 5504) | function add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?s...
  function parse_manifest (line 5521) | function parse_manifest(d, opts) {
  function write_manifest (line 5544) | function write_manifest(manifest) {
  function write_rdf_type (line 5553) | function write_rdf_type(file, res, tag) {
  function write_rdf_has (line 5560) | function write_rdf_has(base, file) {
  function write_rdf (line 5567) | function write_rdf(rdf) {
  function write_meta_ods (line 5578) | function write_meta_ods(wb, opts) {
  function parse_core_props (line 5611) | function parse_core_props(data) {
  function cp_doit (line 5624) | function cp_doit(f, g, h, o, p) {
  function write_core_props (line 5631) | function write_core_props(cp, _opts) {
  function load_props_pairs (line 5680) | function load_props_pairs(HP/*:string|Array<Array<any>>*/, TOP, props, o...
  function parse_ext_props (line 5727) | function parse_ext_props(data, p, opts) {
  function write_ext_props (line 5748) | function write_ext_props(cp/*::, opts*/)/*:string*/ {
  function parse_cust_props (line 5776) | function parse_cust_props(data/*:string*/, opts) {
  function write_cust_props (line 5820) | function write_cust_props(cp/*::, opts*/)/*:string*/ {
  function xlml_set_prop (line 5872) | function xlml_set_prop(Props, tag/*:string*/, val) {
  function xlml_write_docprops (line 5878) | function xlml_write_docprops(Props, opts) {
  function xlml_write_custprops (line 5897) | function xlml_write_custprops(Props, Custprops/*::, opts*/) {
  function parse_FILETIME (line 5932) | function parse_FILETIME(blob) {
  function write_FILETIME (line 5936) | function write_FILETIME(time/*:string|Date*/) {
  function parse_lpstr (line 5947) | function parse_lpstr(blob, type, pad/*:?number*/) {
  function parse_lpwstr (line 5955) | function parse_lpwstr(blob, type, pad) {
  function parse_VtStringBase (line 5964) | function parse_VtStringBase(blob, stringType, pad) {
  function parse_VtString (line 5969) | function parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return p...
  function parse_VtUnalignedString (line 5970) | function parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new ...
  function parse_VtVecLpwstrValue (line 5973) | function parse_VtVecLpwstrValue(blob)/*:Array<string>*/ {
  function parse_VtVecUnalignedLpstrValue (line 5985) | function parse_VtVecUnalignedLpstrValue(blob)/*:Array<string>*/ {
  function parse_VtHeadingPair (line 5994) | function parse_VtHeadingPair(blob) {
  function parse_VtVecHeadingPairValue (line 6003) | function parse_VtVecHeadingPairValue(blob) {
  function parse_dictionary (line 6011) | function parse_dictionary(blob,CodePage) {
  function parse_BLOB (line 6025) | function parse_BLOB(blob) {
  function parse_ClipboardData (line 6034) | function parse_ClipboardData(blob) {
  function parse_TypedPropertyValue (line 6044) | function parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {
  function write_TypedPropertyValue (line 6068) | function write_TypedPropertyValue(type/*:number*/, value) {
  function parse_PropertySet (line 6090) | function parse_PropertySet(blob, PIDSI) {
  function guess_property_type (line 6181) | function guess_property_type(val/*:any*/)/*:number*/ {
  function write_PropertySet (line 6190) | function write_PropertySet(entries, RE, PIDSI) {
  function parse_PropertySetStream (line 6259) | function parse_PropertySetStream(file, PIDSI, clsid) {
  function write_PropertySetStream (line 6293) | function write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:strin...
  function parsenoop2 (line 6315) | function parsenoop2(blob, length) { blob.read_shift(length); return null; }
  function writezeroes (line 6316) | function writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j<n; ++j)...
  function parslurp (line 6318) | function parslurp(blob, length, cb) {
  function parsebool (line 6325) | function parsebool(blob, length/*:number*/) { return blob.read_shift(len...
  function writebool (line 6326) | function writebool(v/*:any*/, o) { if(!o) o=new_buf(2); o.write_shift(2,...
  function parseuint16 (line 6328) | function parseuint16(blob/*::, length:?number, opts:?any*/) { return blo...
  function writeuint16 (line 6329) | function writeuint16(v/*:number*/, o) { if(!o) o=new_buf(2); o.write_shi...
  function parseuint16a (line 6330) | function parseuint16a(blob, length/*:: :?number, opts:?any*/) { return p...
  function parse_Bes (line 6335) | function parse_Bes(blob/*::, length*/) {
  function write_Bes (line 6339) | function write_Bes(v, t/*:string*/, o) {
  function parse_ShortXLUnicodeString (line 6347) | function parse_ShortXLUnicodeString(blob, length, opts) {
  function parse_XLUnicodeRichExtendedString (line 6365) | function parse_XLUnicodeRichExtendedString(blob) {
  function write_XLUnicodeRichExtendedString (line 6384) | function write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {
  function parse_XLUnicodeStringNoCch (line 6401) | function parse_XLUnicodeStringNoCch(blob, cch, opts) {
  function parse_XLUnicodeString (line 6414) | function parse_XLUnicodeString(blob, length, opts) {
  function parse_XLUnicodeString2 (line 6420) | function parse_XLUnicodeString2(blob, length, opts) {
  function write_XLUnicodeString (line 6427) | function write_XLUnicodeString(str, opts, o) {
  function parse_ControlInfo (line 6436) | function parse_ControlInfo(blob/*::, length, opts*/) {
  function parse_URLMoniker (line 6445) | function parse_URLMoniker(blob/*::, length, opts*/) {
  function parse_FileMoniker (line 6460) | function parse_FileMoniker(blob/*::, length*/) {
  function parse_HyperlinkMoniker (line 6475) | function parse_HyperlinkMoniker(blob, length) {
  function parse_HyperlinkString (line 6485) | function parse_HyperlinkString(blob/*::, length*/) {
  function write_HyperlinkString (line 6490) | function write_HyperlinkString(str/*:string*/, o) {
  function parse_Hyperlink (line 6499) | function parse_Hyperlink(blob, length)/*:Hyperlink*/ {
  function write_Hyperlink (line 6524) | function write_Hyperlink(hl) {
  function parse_LongRGBA (line 6561) | function parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1)...
  function parse_LongRGB (line 6564) | function parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, leng...
  function parse_XLSCell (line 6568) | function parse_XLSCell(blob/*::, length*/)/*:Cell*/ {
  function write_XLSCell (line 6574) | function write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {
  function parse_frtHeader (line 6583) | function parse_frtHeader(blob) {
  function parse_OptXLUnicodeString (line 6592) | function parse_OptXLUnicodeString(blob, length, opts) { return length ==...
  function parse_XTI (line 6595) | function parse_XTI(blob, length, opts) {
  function parse_RkRec (line 6602) | function parse_RkRec(blob) {
  function parse_AddinUdf (line 6609) | function parse_AddinUdf(blob, length, opts) {
  function parse_Ref8U (line 6621) | function parse_Ref8U(blob/*::, length*/) {
  function write_Ref8U (line 6628) | function write_Ref8U(r/*:Range*/, o) {
  function parse_RefU (line 6638) | function parse_RefU(blob/*::, length*/) {
  function parse_FtCmo (line 6650) | function parse_FtCmo(blob/*::, length*/) {
  function parse_FtNts (line 6660) | function parse_FtNts(blob) {
  function parse_FtCf (line 6670) | function parse_FtCf(blob) {
  function parse_FtSkip (line 6678) | function parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }
  function parse_FtArray (line 6700) | function parse_FtArray(blob, length/*::, ot*/) {
  function parse_BOF (line 6717) | function parse_BOF(blob, length) {
  function write_BOF (line 6735) | function write_BOF(wb/*:Workbook*/, t/*:number*/, o) {
  function parse_InterfaceHdr (line 6762) | function parse_InterfaceHdr(blob, length) {
  function parse_WriteAccess (line 6770) | function parse_WriteAccess(blob, length, opts) {
  function write_WriteAccess (line 6778) | function write_WriteAccess(s/*:string*/, opts) {
  function parse_WsBool (line 6790) | function parse_WsBool(blob, length, opts) {
  function parse_BoundSheet8 (line 6796) | function parse_BoundSheet8(blob, length, opts) {
  function write_BoundSheet8 (line 6810) | function write_BoundSheet8(data, opts) {
  function parse_SST (line 6824) | function parse_SST(blob, length)/*:SST*/ {
  function write_SST (line 6835) | function write_SST(sst, opts) {
  function parse_ExtSST (line 6847) | function parse_ExtSST(blob, length) {
  function parse_Row (line 6856) | function parse_Row(blob) {
  function parse_ForceFullCalculation (line 6874) | function parse_ForceFullCalculation(blob) {
  function parse_RecalcId (line 6886) | function parse_RecalcId(blob) {
  function parse_DefaultRowHeight (line 6892) | function parse_DefaultRowHeight(blob, length, opts) {
  function parse_Window1 (line 6906) | function parse_Window1(blob) {
  function write_Window1 (line 6913) | function write_Window1(/*::opts*/) {
  function parse_Window2 (line 6927) | function parse_Window2(blob, length, opts) {
  function write_Window2 (line 6932) | function write_Window2(view) {
  function parse_Pane (line 6944) | function parse_Pane(/*blob, length, opts*/) {
  function parse_Font (line 6948) | function parse_Font(blob, length, opts) {
  function write_Font (line 6961) | function write_Font(data, opts) {
  function parse_LabelSst (line 6977) | function parse_LabelSst(blob) {
  function write_LabelSst (line 6982) | function write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:n...
  function parse_Label (line 6990) | function parse_Label(blob, length, opts) {
  function write_Label (line 6999) | function write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:numb...
  function parse_Format (line 7011) | function parse_Format(blob, length, opts) {
  function write_Format (line 7016) | function write_Format(i/*:number*/, f/*:string*/, opts, o) {
  function parse_Dimensions (line 7030) | function parse_Dimensions(blob, length, opts) {
  function write_Dimensions (line 7038) | function write_Dimensions(range, opts) {
  function parse_RK (line 7050) | function parse_RK(blob) {
  function parse_MulRk (line 7057) | function parse_MulRk(blob, length) {
  function parse_MulBlank (line 7068) | function parse_MulBlank(blob, length) {
  function parse_CellStyleXF (line 7080) | function parse_CellStyleXF(blob, length, style, opts) {
  function parse_XF (line 7124) | function parse_XF(blob, length, opts) {
  function write_XF (line 7132) | function write_XF(data, ixfeP, opts, o) {
  function parse_Guts (line 7153) | function parse_Guts(blob) {
  function write_Guts (line 7161) | function write_Guts(guts/*:Array<number>*/) {
  function parse_BoolErr (line 7170) | function parse_BoolErr(blob, length, opts) {
  function write_BoolErr (line 7178) | function write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opt...
  function parse_Number (line 7186) | function parse_Number(blob, length, opts) {
  function write_Number (line 7193) | function write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opt...
  function parse_SupBook (line 7203) | function parse_SupBook(blob, length, opts) {
  function parse_ExternName (line 7218) | function parse_ExternName(blob, length, opts) {
  function parse_Lbl (line 7238) | function parse_Lbl(blob, length, opts) {
  function parse_ExternSheet (line 7266) | function parse_ExternSheet(blob, length, opts) {
  function parse_BIFF5ExternSheet (line 7276) | function parse_BIFF5ExternSheet(blob, length, opts) {
  function parse_NameCmt (line 7283) | function parse_NameCmt(blob, length, opts) {
  function parse_ShrFmla (line 7293) | function parse_ShrFmla(blob, length, opts) {
  function parse_Array (line 7302) | function parse_Array(blob, length, opts) {
  function parse_MTRSettings (line 7314) | function parse_MTRSettings(blob) {
  function parse_NoteSh (line 7322) | function parse_NoteSh(blob, length, opts) {
  function parse_Note (line 7332) | function parse_Note(blob, length, opts) {
  function parse_MergeCells (line 7338) | function parse_MergeCells(blob, length)/*:Array<Range>*/ {
  function write_MergeCells (line 7344) | function write_MergeCells(merges/*:Array<Range>*/) {
  function parse_Obj (line 7352) | function parse_Obj(blob, length, opts) {
  function parse_BIFF5Obj (line 7376) | function parse_BIFF5Obj(blob, length, opts) {
  function parse_TxO (line 7398) | function parse_TxO(blob, length, opts) {
  function parse_HLink (line 7438) | function parse_HLink(blob, length) {
  function write_HLink (line 7444) | function write_HLink(hl) {
  function parse_HLinkTooltip (line 7456) | function parse_HLinkTooltip(blob, length) {
  function write_HLinkTooltip (line 7463) | function write_HLinkTooltip(hl) {
  function parse_Country (line 7476) | function parse_Country(blob)/*:[string|number, string|number]*/ {
  function write_Country (line 7482) | function write_Country(o) {
  function parse_ClrtClient (line 7490) | function parse_ClrtClient(blob) {
  function parse_Palette (line 7498) | function parse_Palette(blob) {
  function parse_XFCRC (line 7506) | function parse_XFCRC(blob) {
  function parse_ColInfo (line 7516) | function parse_ColInfo(blob, length, opts) {
  function write_ColInfo (line 7529) | function write_ColInfo(col, idx) {
  function parse_Setup (line 7545) | function parse_Setup(blob, length) {
  function parse_ShtProps (line 7556) | function parse_ShtProps(blob, length, opts) {
  function write_RRTabId (line 7565) | function write_RRTabId(n/*:number*/) {
  function parse_ImData (line 7576) | function parse_ImData(blob) {
  function parse_BIFF2STR (line 7586) | function parse_BIFF2STR(blob, length, opts) {
  function parse_BIFF2NUM (line 7596) | function parse_BIFF2NUM(blob/*::, length*/) {
  function write_BIFF2NUM (line 7604) | function write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {
  function parse_BIFF2INT (line 7611) | function parse_BIFF2INT(blob) {
  function write_BIFF2INT (line 7619) | function write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {
  function parse_BIFF2STRING (line 7626) | function parse_BIFF2STRING(blob) {
  function parse_BIFF2FONTXTRA (line 7633) | function parse_BIFF2FONTXTRA(blob, length) {
  function parse_RString (line 7643) | function parse_RString(blob, length, opts) {
  function dbf_to_aoa (line 7713) | function dbf_to_aoa(buf, opts)/*:AOA*/ {
  function dbf_to_sheet (line 7876) | function dbf_to_sheet(buf, opts)/*:Worksheet*/ {
  function dbf_to_workbook (line 7888) | function dbf_to_workbook(buf, opts)/*:Workbook*/ {
  function sheet_to_dbf (line 7898) | function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
  function sylk_to_aoa (line 8061) | function sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {
  function sylk_to_aoa_str (line 8070) | function sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {
  function sylk_to_workbook (line 8213) | function sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {
  function write_ws_cell_sylk (line 8225) | function write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*...
  function write_ws_cols_sylk (line 8239) | function write_ws_cols_sylk(out, cols) {
  function write_ws_rows_sylk (line 8252) | function write_ws_rows_sylk(out/*:Array<string>*/, rows/*:Array<RowInfo>...
  function sheet_to_sylk (line 8262) | function sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/...
  function dif_to_aoa (line 8297) | function dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {
  function dif_to_aoa_str (line 8306) | function dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {
  function dif_to_sheet (line 8342) | function dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_t...
  function dif_to_workbook (line 8343) | function dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {
  function make_value (line 8349) | function make_value(v/*:number*/, s/*:string*/)/*:string*/ { return "0,"...
  function make_value_str (line 8350) | function make_value_str(s/*:string*/)/*:string*/ { return "1,0\r\n\"" + ...
  function sheet_to_dif (line 8351) | function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
  function decode (line 8406) | function decode(s/*:string*/)/*:string*/ { return s.replace(/\\b/g,"\\")...
  function encode (line 8407) | function encode(s/*:string*/)/*:string*/ { return s.replace(/\\/g, "\\b"...
  function eth_to_aoa (line 8409) | function eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {
  function eth_to_sheet (line 8434) | function eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_...
  function eth_to_workbook (line 8435) | function eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet...
  function sheet_to_eth_data (line 8456) | function sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {
  function sheet_to_eth (line 8493) | function sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
  function set_text_arr (line 8506) | function set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:nu...
  function prn_to_aoa_str (line 8516) | function prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {
  function guess_sep (line 8558) | function guess_sep(str) {
  function dsv_to_sheet_str (line 8582) | function dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
  function prn_to_sheet_str (line 8655) | function prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
  function prn_to_sheet (line 8663) | function prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {
  function prn_to_workbook (line 8684) | function prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return shee...
  function sheet_to_prn (line 8686) | function sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {
  function read_wb_ID (line 8713) | function read_wb_ID(d, opts) {
  function lotushopper (line 8727) | function lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {
  function lotus_to_workbook (line 8742) | function lotus_to_workbook(d/*:RawData*/, opts) {
  function lotus_to_workbook_buf (line 8752) | function lotus_to_workbook_buf(d, opts)/*:Workbook*/ {
  function sheet_to_wk1 (line 8880) | function sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
  function book_to_wk3 (line 8913) | function book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {
  function write_BOF_WK1 (line 8956) | function write_BOF_WK1(v/*:number*/) {
  function write_BOF_WK3 (line 8962) | function write_BOF_WK3(wb/*:Workbook*/) {
  function parse_RANGE (line 8990) | function parse_RANGE(blob, length, opts) {
  function write_RANGE (line 9010) | function write_RANGE(range) {
  function parse_cell (line 9019) | function parse_cell(blob, length, opts) {
  function parse_LABEL (line 9036) | function parse_LABEL(blob, length, opts) {
  function write_LABEL (line 9050) | function write_LABEL(R, C, s) {
  function parse_STRING (line 9064) | function parse_STRING(blob, length, opts) {
  function parse_INTEGER (line 9077) | function parse_INTEGER(blob, length, opts) {
  function write_INTEGER (line 9082) | function write_INTEGER(R, C, v) {
  function parse_NUMBER (line 9091) | function parse_NUMBER(blob, length, opts) {
  function write_NUMBER (line 9096) | function write_NUMBER(R, C, v) {
  function parse_FORMULA (line 9105) | function parse_FORMULA(blob, length, opts) {
  function wk1_parse_rc (line 9119) | function wk1_parse_rc(B, V, col) {
  function wk1_fmla_to_csf (line 9221) | function wk1_fmla_to_csf(blob, o) {
  function parse_cell_3 (line 9285) | function parse_cell_3(blob/*::, length*/) {
  function parse_LABEL_16 (line 9291) | function parse_LABEL_16(blob, length) {
  function write_LABEL_16 (line 9297) | function write_LABEL_16(R, C, wsidx, s) {
  function parse_NUMBER_18 (line 9312) | function parse_NUMBER_18(blob, length) {
  function parse_NUMBER_17 (line 9332) | function parse_NUMBER_17(blob, length) {
  function write_NUMBER_17 (line 9347) | function write_NUMBER_17(R, C, wsidx, v) {
  function parse_FORMULA_19 (line 9376) | function parse_FORMULA_19(blob, length) {
  function parse_NUMBER_25 (line 9382) | function parse_NUMBER_25(blob, length) {
  function parse_NUMBER_27 (line 9389) | function parse_NUMBER_27(blob, length) {
  function parse_FORMULA_28 (line 9396) | function parse_FORMULA_28(blob, length) {
  function parse_SHEETNAMECS (line 9402) | function parse_SHEETNAMECS(blob, length) {
  function parse_SHEETNAMELP (line 9406) | function parse_SHEETNAMELP(blob, length) {
  function parse_SHEETINFOQP (line 9413) | function parse_SHEETINFOQP(blob, length, opts) {
  function parse_XFORMAT (line 9423) | function parse_XFORMAT(blob, length) {
  function write_XFORMAT_SHEETNAME (line 9436) | function write_XFORMAT_SHEETNAME(name, wsidx) {
  function qpw_to_workbook_buf (line 9643) | function qpw_to_workbook_buf(d, opts)/*:Workbook*/ {
  function parse_rpr (line 9787) | function parse_rpr(rpr) {
  function parse_r (line 9897) | function parse_r(r) {
  function parse_rpr2 (line 9917) | function parse_rpr2(font, intro, outro) {
  function r_to_html (line 9941) | function r_to_html(r) {
  function parse_si (line 9958) | function parse_si(x, opts) {
  function parse_sst_xml (line 9985) | function parse_sst_xml(data/*:string*/, opts)/*:SST*/ {
  function write_sst_xml (line 10002) | function write_sst_xml(sst/*:SST*/, opts)/*:string*/ {
  function parse_BrtBeginSst (line 10028) | function parse_BrtBeginSst(data) {
  function parse_sst_bin (line 10033) | function parse_sst_bin(data, opts)/*:SST*/ {
  function write_BrtBeginSst (line 10058) | function write_BrtBeginSst(sst, o) {
  function write_sst_bin (line 10067) | function write_sst_bin(sst/*::, opts*/) {
  function _JS2ANSI (line 10075) | function _JS2ANSI(str/*:string*/)/*:Array<number>*/ {
  function parse_CRYPTOVersion (line 10083) | function parse_CRYPTOVersion(blob, length/*:?number*/) {
  function parse_DataSpaceVersionInfo (line 10093) | function parse_DataSpaceVersionInfo(blob) {
  function parse_DataSpaceMapEntry (line 10103) | function parse_DataSpaceMapEntry(blob) {
  function parse_DataSpaceMap (line 10118) | function parse_DataSpaceMap(blob) {
  function parse_DataSpaceDefinition (line 10127) | function parse_DataSpaceDefinition(blob)/*:Array<string>*/ {
  function parse_TransformInfoHeader (line 10136) | function parse_TransformInfoHeader(blob) {
  function parse_Primary (line 10148) | function parse_Primary(blob) {
  function parse_EncryptionHeader (line 10160) | function parse_EncryptionHeader(blob, length/*:number*/) {
  function parse_EncryptionVerifier (line 10184) | function parse_EncryptionVerifier(blob, length/*:number*/) {
  function parse_EncryptionInfo (line 10195) | function parse_EncryptionInfo(blob) {
  function parse_EncInfoStd (line 10206) | function parse_EncInfoStd(blob/*::, vers*/) {
  function parse_EncInfoExt (line 10216) | function parse_EncInfoExt(/*::blob, vers*/) { throw new Error("File is p...
  function parse_EncInfoAgl (line 10218) | function parse_EncInfoAgl(blob/*::, vers*/) {
  function parse_RC4CryptoHeader (line 10243) | function parse_RC4CryptoHeader(blob, length/*:number*/) {
  function parse_RC4Header (line 10255) | function parse_RC4Header(blob/*::, length*/) {
  function crypto_CreatePasswordVerifier_Method1 (line 10266) | function crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {
  function parse_XORObfuscation (line 10368) | function parse_XORObfuscation(blob, length, opts, out) {
  function parse_FilePassHeader (line 10377) | function parse_FilePassHeader(blob, length/*:number*/, oo) {
  function parse_FilePass (line 10383) | function parse_FilePass(blob, length/*:number*/, opts) {
  function rtf_to_sheet (line 10391) | function rtf_to_sheet(d, opts) {
  function rtf_to_sheet_str (line 10404) | function rtf_to_sheet_str(str, opts) {
  function rtf_to_workbook (line 10462) | function rtf_to_workbook(d, opts) {
  function sheet_to_rtf (line 10467) | function sheet_to_rtf(ws, opts) {
  function hex2RGB (line 10494) | function hex2RGB(h) {
  function rgb2Hex (line 10498) | function rgb2Hex(rgb) {
  function rgb2HSL (line 10503) | function rgb2HSL(rgb) {
  function hsl2RGB (line 10518) | function hsl2RGB(hsl){
  function rgb_tint (line 10537) | function rgb_tint(hex, tint) {
  function width2px (line 10548) | function width2px(width) { return Math.floor(( width + (Math.round(128/M...
  function px2char (line 10549) | function px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }
  function char2width (line 10550) | function char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/...
  function cycle_width (line 10553) | function cycle_width(collw) { return char2width(px2char(width2px(collw))...
  function find_mdw_colw (line 10555) | function find_mdw_colw(collw) {
  function process_col (line 10572) | function process_col(coll/*:ColInfo*/) {
  function px2pt (line 10590) | function px2pt(px) { return px * 96 / PPI; }
  function pt2px (line 10591) | function pt2px(pt) { return pt * PPI / 96; }
  function parse_borders (line 10613) | function parse_borders(t, styles, themes, opts) {
  function parse_fills (line 10688) | function parse_fills(t, styles, themes, opts) {
  function parse_fonts (line 10754) | function parse_fonts(t, styles, themes, opts) {
  function parse_numFmts (line 10874) | function parse_numFmts(t, styles, opts) {
  function write_numFmts (line 10901) | function write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {
  function parse_cellXfs (line 10915) | function parse_cellXfs(t, styles, opts) {
  function write_cellXfs (line 10970) | function write_cellXfs(cellXfs)/*:string*/ {
  function write_sty_xml (line 11024) | function write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {
  function parse_BrtFmt (line 11043) | function parse_BrtFmt(data, length/*:number*/) {
  function write_BrtFmt (line 11048) | function write_BrtFmt(i/*:number*/, f/*:string*/, o) {
  function parse_BrtFont (line 11058) | function parse_BrtFont(data, length/*:number*/, opts) {
  function write_BrtFont (line 11102) | function write_BrtFont(font/*:any*/, o) {
  function write_BrtFill (line 11149) | function write_BrtFill(fill, o) {
  function parse_BrtXF (line 11180) | function parse_BrtXF(data, length/*:number*/) {
  function write_BrtXF (line 11187) | function write_BrtXF(data, ixfeP, o) {
  function write_Blxf (line 11205) | function write_Blxf(data, o) {
  function write_BrtBorder (line 11215) | function write_BrtBorder(border, o) {
  function write_BrtStyle (line 11227) | function write_BrtStyle(style, o) {
  function write_BrtBeginTableStyles (line 11238) | function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {
  function parse_sty_bin (line 11247) | function parse_sty_bin(data, themes, opts) {
  function write_FMTS_bin (line 11309) | function write_FMTS_bin(ba, NF/*:?SSFTable*/) {
  function write_FONTS_bin (line 11326) | function write_FONTS_bin(ba/*::, data*/) {
  function write_FILLS_bin (line 11342) | function write_FILLS_bin(ba/*::, data*/) {
  function write_BORDERS_bin (line 11353) | function write_BORDERS_bin(ba/*::, data*/) {
  function write_CELLSTYLEXFS_bin (line 11363) | function write_CELLSTYLEXFS_bin(ba/*::, data*/) {
  function write_CELLXFS_bin (line 11376) | function write_CELLXFS_bin(ba, data) {
  function write_STYLES_bin (line 11383) | function write_STYLES_bin(ba/*::, data*/) {
  function write_DXFS_bin (line 11396) | function write_DXFS_bin(ba/*::, data*/) {
  function write_TABLESTYLES_bin (line 11404) | function write_TABLESTYLES_bin(ba/*::, data*/) {
  function write_COLORPALETTE_bin (line 11412) | function write_COLORPALETTE_bin(/*::ba, data*/) {
  function write_sty_bin (line 11418) | function write_sty_bin(wb, opts) {
  function parse_clrScheme (line 11443) | function parse_clrScheme(t, themes, opts) {
  function parse_fontScheme (line 11498) | function parse_fontScheme(/*::t, themes, opts*/) { }
  function parse_fmtScheme (line 11501) | function parse_fmtScheme(/*::t, themes, opts*/) { }
  function parse_themeElements (line 11508) | function parse_themeElements(data, themes, opts) {
  function parse_theme_xml (line 11529) | function parse_theme_xml(data/*:string*/, opts) {
  function write_theme (line 11543) | function write_theme(Themes, opts)/*:string*/ {
  function parse_Theme (line 11715) | function parse_Theme(blob, length, opts) {
  function parse_ColorTheme (line 11729) | function parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4...
  function parse_FullColorExt (line 11732) | function parse_FullColorExt(blob/*::, length*/) {
  function parse_IcvXF (line 11748) | function parse_IcvXF(blob, length) {
  function parse_XFExtGradient (line 11753) | function parse_XFExtGradient(blob, length) {
  function parse_ExtProp (line 11758) | function parse_ExtProp(blob/*::, length*/)/*:Array<any>*/ {
  function parse_XFExt (line 11774) | function parse_XFExt(blob, length) {
  function update_xfext (line 11786) | function update_xfext(xf, xfext) {
  function parse_BrtMdtinfo (line 11805) | function parse_BrtMdtinfo(data, length) {
  function write_BrtMdtinfo (line 11812) | function write_BrtMdtinfo(data) {
  function parse_BrtMdb (line 11819) | function parse_BrtMdb(data) {
  function write_BrtMdb (line 11826) | function write_BrtMdb(mdb) {
  function write_BrtBeginEsfmd (line 11835) | function write_BrtBeginEsfmd(cnt, name) {
  function parse_BrtBeginEsmdb (line 11841) | function parse_BrtBeginEsmdb(data) {
  function write_BrtBeginEsmdb (line 11845) | function write_BrtBeginEsmdb(cnt, cm) {
  function parse_xlmeta_bin (line 11851) | function parse_xlmeta_bin(data, name, _opts) {
  function write_xlmeta_bin (line 11892) | function write_xlmeta_bin() {
  function parse_xlmeta_xml (line 11916) | function parse_xlmeta_xml(data, name, opts) {
  function write_xlmeta_xml (line 11996) | function write_xlmeta_xml() {
  function parse_cc_xml (line 12002) | function parse_cc_xml(data/*::, name, opts*/)/*:Array<any>*/ {
  function parse_BrtCalcChainItem$ (line 12022) | function parse_BrtCalcChainItem$(data) {
  function parse_cc_bin (line 12036) | function parse_cc_bin(data, name, opts) {
  function parse_xlink_xml (line 12054) | function parse_xlink_xml(/*::data, rel, name:string, _opts*/) {
  function parse_xlink_bin (line 12060) | function parse_xlink_bin(data, rel, name/*:string*/, _opts) {
  function parse_drawing (line 12105) | function parse_drawing(data, rels/*:any*/) {
  function write_vml (line 12124) | function write_vml(rId/*:number*/, comments) {
  function write_vml_comment (line 12146) | function write_vml_comment(x, _shapeid)/*:string*/ {
  function sheet_insert_comments (line 12180) | function sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array<Raw...
  function parse_comments_xml (line 12219) | function parse_comments_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
  function write_comments_xml (line 12250) | function write_comments_xml(data/*::, opts*/) {
  function parse_tcmnt_xml (line 12298) | function parse_tcmnt_xml(data/*:string*/, opts)/*:Array<RawComment>*/ {
  function write_tcmnt_xml (line 12336) | function write_tcmnt_xml(comments, people, opts) {
  function parse_people_xml (line 12359) | function parse_people_xml(data/*:string*/, opts) {
  function write_people_xml (line 12387) | function write_people_xml(people/*, opts*/) {
  function parse_BrtBeginComment (line 12404) | function parse_BrtBeginComment(data) {
  function write_BrtBeginComment (line 12413) | function write_BrtBeginComment(data, o) {
  function write_BrtCommentAuthor (line 12426) | function write_BrtCommentAuthor(data) { return write_XLWideString(data.s...
  function parse_comments_bin (line 12429) | function parse_comments_bin(data, opts)/*:Array<RawComment>*/ {
  function write_comments_bin (line 12468) | function write_comments_bin(data/*::, opts*/) {
  function make_vba_xls (line 12500) | function make_vba_xls(cfb) {
  function fill_vba_xls (line 12510) | function fill_vba_xls(cfb, vba) {
  function parse_ds_bin (line 12521) | function parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, ...
  function parse_ds_xml (line 12522) | function parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, ...
  function parse_ms_bin (line 12523) | function parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, ...
  function parse_ms_xml (line 12524) | function parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, ...
  function rcfunc (line 12529) | function rcfunc($$,$1,$2,$3) {
  function shift_formula_str (line 12564) | function shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {
  function shift_formula_xlsx (line 12570) | function shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:strin...
  function fuzzyfmla (line 12577) | function fuzzyfmla(f/*:string*/)/*:boolean*/ {
  function _xlfn (line 12582) | function _xlfn(f/*:string*/)/*:string*/ {
  function parseread1 (line 12585) | function parseread1(blob) { blob.l+=1; return; }
  function parse_ColRelU (line 12588) | function parse_ColRelU(blob, length) {
  function parse_RgceArea (line 12594) | function parse_RgceArea(blob, length, opts) {
  function parse_RgceArea_BIFF2 (line 12606) | function parse_RgceArea_BIFF2(blob/*::, length, opts*/) {
  function parse_RgceAreaRel (line 12614) | function parse_RgceAreaRel(blob, length, opts) {
  function parse_RgceLoc (line 12623) | function parse_RgceLoc(blob, length, opts) {
  function parse_RgceLoc_BIFF2 (line 12629) | function parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {
  function parse_RgceElfLoc (line 12636) | function parse_RgceElfLoc(blob/*::, length, opts*/) {
  function parse_RgceLocRel (line 12643) | function parse_RgceLocRel(blob, length, opts) {
  function parse_RgceLocRel_BIFF2 (line 12654) | function parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {
  function parse_PtgArea (line 12665) | function parse_PtgArea(blob, length, opts) {
  function parse_PtgArea3d (line 12672) | function parse_PtgArea3d(blob, length, opts) {
  function parse_PtgAreaErr (line 12685) | function parse_PtgAreaErr(blob, length, opts) {
  function parse_PtgAreaErr3d (line 12691) | function parse_PtgAreaErr3d(blob, length, opts) {
  function parse_PtgAreaN (line 12704) | function parse_PtgAreaN(blob, length, opts) {
  function parse_PtgArray (line 12711) | function parse_PtgArray(blob, length, opts) {
  function parse_PtgAttrBaxcel (line 12718) | function parse_PtgAttrBaxcel(blob) {
  function parse_PtgAttrChoose (line 12726) | function parse_PtgAttrChoose(blob, length, opts)/*:Array<number>*/ {
  function parse_PtgAttrGoto (line 12736) | function parse_PtgAttrGoto(blob, length, opts) {
  function parse_PtgAttrIf (line 12743) | function parse_PtgAttrIf(blob, length, opts) {
  function parse_PtgAttrIfError (line 12750) | function parse_PtgAttrIfError(blob) {
  function parse_PtgAttrSemi (line 12757) | function parse_PtgAttrSemi(blob, length, opts) {
  function parse_PtgAttrSpaceType (line 12764) | function parse_PtgAttrSpaceType(blob/*::, length*/) {
  function parse_PtgAttrSpace (line 12770) | function parse_PtgAttrSpace(blob) {
  function parse_PtgAttrSpaceSemi (line 12776) | function parse_PtgAttrSpaceSemi(blob) {
  function parse_PtgRef (line 12782) | function parse_PtgRef(blob, length, opts) {
  function parse_PtgRefN (line 12791) | function parse_PtgRefN(blob, length, opts) {
  function parse_PtgRef3d (line 12799) | function parse_PtgRef3d(blob, length, opts) {
  function parse_PtgFunc (line 12810) | function parse_PtgFunc(blob, length, opts) {
  function parse_PtgFuncVar (line 12818) | function parse_PtgFuncVar(blob, length, opts) {
  function parsetab (line 12824) | function parsetab(blob) {
  function parse_PtgAttrSum (line 12829) | function parse_PtgAttrSum(blob, length, opts) {
  function parse_PtgExp (line 12834) | function parse_PtgExp(blob, length, opts) {
  function parse_PtgErr (line 12843) | function parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }
  function parse_PtgInt (line 12846) | function parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }
  function parse_PtgBool (line 12849) | function parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}
  function parse_PtgNum (line 12852) | function parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }
  function parse_PtgStr (line 12855) | function parse_PtgStr(blob, length, opts) { blob.l++; return parse_Short...
  function parse_SerAr (line 12859) | function parse_SerAr(blob, biff/*:number*/) {
  function parse_PtgExtraMem (line 12887) | function parse_PtgExtraMem(blob, cce, opts) {
  function parse_PtgExtraArray (line 12895) | function parse_PtgExtraArray(blob, length, opts) {
  function parse_PtgName (line 12912) | function parse_PtgName(blob, length, opts) {
  function parse_PtgNameX (line 12925) | function parse_PtgNameX(blob, length, opts) {
  function parse_PtgNameX_BIFF5 (line 12932) | function parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {
  function parse_PtgMemArea (line 12942) | function parse_PtgMemArea(blob, length, opts) {
  function parse_PtgMemFunc (line 12950) | function parse_PtgMemFunc(blob, length, opts) {
  function parse_PtgRefErr (line 12958) | function parse_PtgRefErr(blob, length, opts) {
  function parse_PtgRefErr3d (line 12967) | function parse_PtgRefErr3d(blob, length, opts) {
  function parse_PtgElfLoc (line 12986) | function parse_PtgElfLoc(blob, length, opts) {
  function parse_PtgElfNoop (line 12990) | function parse_PtgElfNoop(blob/*::, length, opts*/) {
  function parse_PtgElfLel (line 13003) | function parse_PtgElfLel(blob/*::, length, opts*/) {
  function parse_PtgList (line 13038) | function parse_PtgList(blob/*::, length, opts*/) {
  function parse_PtgSxName (line 13049) | function parse_PtgSxName(blob/*::, length, opts*/) {
  function parse_PtgSheet (line 13055) | function parse_PtgSheet(blob, length, opts) {
  function parse_PtgEndSheet (line 13061) | function parse_PtgEndSheet(blob, length, opts) {
  function parse_PtgMemAreaN (line 13065) | function parse_PtgMemAreaN(blob/*::, length, opts*/) {
  function parse_PtgMemNoMemN (line 13070) | function parse_PtgMemNoMemN(blob/*::, length, opts*/) {
  function parse_PtgAttrNoop (line 13075) | function parse_PtgAttrNoop(blob/*::, length, opts*/) {
  function parse_RgbExtra (line 13191) | function parse_RgbExtra(blob, length, rgce, opts) {
  function parse_Rgce (line 13226) | function parse_Rgce(blob, length, opts) {
  function stringify_array (line 13240) | function stringify_array(f/*:Array<Array<string>>*/)/*:string*/ {
  function make_3d_range (line 13276) | function make_3d_range(start, end) {
  function get_ixti_raw (line 13284) | function get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {
  function get_ixti (line 13318) | function get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {
  function stringify_formula (line 13322) | function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, s...
  function parse_ArrayParsedFormula (line 13633) | function parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {
  function parse_XLSCellParsedFormula (line 13644) | function parse_XLSCellParsedFormula(blob, length, opts) {
  function parse_NameParsedFormula (line 13655) | function parse_NameParsedFormula(blob, length, opts, cce) {
  function parse_SharedParsedFormula (line 13664) | function parse_SharedParsedFormula(blob, length, opts) {
  function parse_FormulaValue (line 13674) | function parse_FormulaValue(blob/*::, length*/) {
  function write_FormulaValue (line 13685) | function write_FormulaValue(value) {
  function parse_Formula (line 13700) | function parse_Formula(blob, length, opts) {
  function write_Formula (line 13715) | function write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ...
  function parse_XLSBParsedFormula (line 13738) | function parse_XLSBParsedFormula(data, length, opts) {
  function write_XLSBFormulaNum (line 13760) | function write_XLSBFormulaNum(val/*:number*/) {
  function write_XLSBFormulaErr (line 13778) | function write_XLSBFormulaErr(val/*:number*/) {
  function write_XLSBFormulaBool (line 13787) | function write_XLSBFormulaBool(val/*:boolean*/) {
  function write_XLSBFormulaStr (line 13797) | function write_XLSBFormulaStr(val/*:string*/) {
  function write_XLSBFormulaRef (line 13813) | function write_XLSBFormulaRef(str) {
  function write_XLSBFormulaRef3D (line 13826) | function write_XLSBFormulaRef3D(str, wb) {
  function write_XLSBFormulaRefErr3D (line 13845) | function write_XLSBFormulaRefErr3D(str, wb) {
  function write_XLSBFormulaRange (line 13863) | function write_XLSBFormulaRange(_str) {
  function write_XLSBFormulaRangeWS (line 13892) | function write_XLSBFormulaRangeWS(_str, wb) {
  function write_XLSBFormulaArea3D (line 13925) | function write_XLSBFormulaArea3D(_str, wb) {
  function write_XLSBFormula (line 13949) | function write_XLSBFormula(val/*:string|number*/, wb) {
  function ods_to_csf_formula (line 15098) | function ods_to_csf_formula(f/*:string*/)/*:string*/ {
  function csf_to_ods_formula (line 15115) | function csf_to_ods_formula(f/*:string*/)/*:string*/ {
  function ods_to_csf_3D (line 15121) | function ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {
  function csf_to_ods_3D (line 15129) | function csf_to_ods_3D(r/*:string*/)/*:string*/ {
  function get_sst_id (line 15140) | function get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {
  function col_obj_w (line 15165) | function col_obj_w(C/*:number*/, col) {
  function default_margins (line 15180) | function default_margins(margins/*:Margins*/, mode/*:?string*/) {
  function get_cell_style (line 15192) | function get_cell_style(styles/*:Array<any>*/, cell/*:Cell*/, opts) {
  function safe_format (line 15216) | function safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, o...
  function check_ws (line 15255) | function check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {
  function parse_ws_xml_dim (line 15261) | function parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {
  function parse_ws_xml (line 15277) | function parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*...
  function write_ws_xml_merges (line 15357) | function write_ws_xml_merges(merges/*:Array<Range>*/)/*:string*/ {
  function parse_ws_xml_sheetpr (line 15365) | function parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, i...
  function parse_ws_xml_sheetpr2 (line 15370) | function parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, w...
  function write_ws_xml_sheetpr (line 15373) | function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {
  function write_ws_xml_protection (line 15402) | function write_ws_xml_protection(sp)/*:string*/ {
  function parse_ws_xml_hlinks (line 15412) | function parse_ws_xml_hlinks(s, data/*:Array<string>*/, rels) {
  function parse_ws_xml_margins (line 15442) | function parse_ws_xml_margins(margin) {
  function write_ws_xml_margins (line 15449) | function write_ws_xml_margins(margin)/*:string*/ {
  function parse_ws_xml_cols (line 15454) | function parse_ws_xml_cols(columns, cols) {
  function write_ws_xml_cols (line 15467) | function write_ws_xml_cols(ws, cols)/*:string*/ {
  function parse_ws_xml_autofilter (line 15477) | function parse_ws_xml_autofilter(data/*:string*/) {
  function write_ws_xml_autofilter (line 15481) | function write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {
  function parse_ws_xml_sheetviews (line 15501) | function parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {
  function write_ws_xml_sheetviews (line 15513) | function write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {
  function write_ws_xml_cell (line 15520) | function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/...
  function write_ws_xml_data (line 15766) | function write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:...
  function write_ws_xml (line 15810) | function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:str...
  function parse_BrtRowHdr (line 15931) | function parse_BrtRowHdr(data, length) {
  function write_BrtRowHdr (line 15945) | function write_BrtRowHdr(R/*:number*/, range, ws) {
  function write_row_header (line 15994) | function write_row_header(ba, ws, range, R) {
  function parse_BrtWsFmtInfo (line 16004) | function parse_BrtWsFmtInfo(/*::data, length*/) {
  function parse_BrtWsProp (line 16009) | function parse_BrtWsProp(data, length) {
  function write_BrtWsProp (line 16019) | function write_BrtWsProp(str, outl, o) {
  function parse_BrtCellBlank (line 16036) | function parse_BrtCellBlank(data) {
  function write_BrtCellBlank (line 16040) | function write_BrtCellBlank(cell, ncell, o) {
  function parse_BrtShortBlank (line 16044) | function parse_BrtShortBlank(data) {
  function write_BrtShortBlank (line 16048) | function write_BrtShortBlank(cell, ncell, o) {
  function parse_BrtCellBool (line 16054) | function parse_BrtCellBool(data) {
  function write_BrtCellBool (line 16059) | function write_BrtCellBool(cell, ncell, o) {
  function parse_BrtShortBool (line 16065) | function parse_BrtShortBool(data) {
  function write_BrtShortBool (line 16070) | function write_BrtShortBool(cell, ncell, o) {
  function parse_BrtCellError (line 16078) | function parse_BrtCellError(data) {
  function write_BrtCellError (line 16083) | function write_BrtCellError(cell, ncell, o) {
  function parse_BrtShortError (line 16089) | function parse_BrtShortError(data) {
  function write_BrtShortError (line 16094) | function write_BrtShortError(cell, ncell, o) {
  function parse_BrtCellIsst (line 16105) | function parse_BrtCellIsst(data) {
  function write_BrtCellIsst (line 16110) | function write_BrtCellIsst(cell, ncell, o) {
  function parse_BrtShortIsst (line 16116) | function parse_BrtShortIsst(data) {
  function write_BrtShortIsst (line 16121) | function write_BrtShortIsst(cell, ncell, o) {
  function parse_BrtCellReal (line 16129) | function parse_BrtCellReal(data) {
  function write_BrtCellReal (line 16134) | function write_BrtCellReal(cell, ncell, o) {
  function parse_BrtShortReal (line 16140) | function parse_BrtShortReal(data) {
  function write_BrtShortReal (line 16145) | function write_BrtShortReal(cell, ncell, o) {
  function parse_BrtCellRk (line 16153) | function parse_BrtCellRk(data) {
  function write_BrtCellRk (line 16158) | function write_BrtCellRk(cell, ncell, o) {
  function parse_BrtShortRk (line 16164) | function parse_BrtShortRk(data) {
  function write_BrtShortRk (line 16169) | function write_BrtShortRk(cell, ncell, o) {
  function parse_BrtCellRString (line 16177) | function parse_BrtCellRString(data) {
  function parse_BrtCellSt (line 16184) | function parse_BrtCellSt(data) {
  function write_BrtCellSt (line 16189) | function write_BrtCellSt(cell, ncell, o) {
  function parse_BrtShortSt (line 16196) | function parse_BrtShortSt(data) {
  function write_BrtShortSt (line 16201) | function write_BrtShortSt(cell, ncell, o) {
  function parse_BrtFmlaBool (line 16210) | function parse_BrtFmlaBool(data, length, opts) {
  function parse_BrtFmlaError (line 16226) | function parse_BrtFmlaError(data, length, opts) {
  function parse_BrtFmlaNum (line 16242) | function parse_BrtFmlaNum(data, length, opts) {
  function parse_BrtFmlaString (line 16258) | function parse_BrtFmlaString(data, length, opts) {
  function write_BrtBeginMergeCells (line 16277) | function write_BrtBeginMergeCells(cnt, o) {
  function parse_BrtHLink (line 16284) | function parse_BrtHLink(data, length/*::, opts*/) {
  function write_BrtHLink (line 16296) | function write_BrtHLink(l, rId) {
  function parse_BrtPane (line 16309) | function parse_BrtPane(/*data, length, opts*/) {
  function parse_BrtArrFmla (line 16313) | function parse_BrtArrFmla(data, length, opts) {
  function parse_BrtShrFmla (line 16326) | function parse_BrtShrFmla(data, length, opts) {
  function write_BrtColInfo (line 16340) | function write_BrtColInfo(C/*:number*/, col, o) {
  function parse_BrtMargins (line 16357) | function parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {
  function write_BrtMargins (line 16362) | function write_BrtMargins(margins/*:Margins*/, o) {
  function parse_BrtBeginWsView (line 16370) | function parse_BrtBeginWsView(data/*::, length, opts*/) {
  function write_BrtBeginWsView (line 16375) | function write_BrtBeginWsView(ws, Workbook, o) {
  function write_BrtCellIgnoreEC (line 16395) | function write_BrtCellIgnoreEC(ref) {
  function write_BrtSheetProtection (line 16404) | function write_BrtSheetProtection(sp, o) {
  function parse_BrtDVal (line 16432) | function parse_BrtDVal(/*data, length, opts*/) {
  function parse_BrtDVal14 (line 16434) | function parse_BrtDVal14(/*data, length, opts*/) {
  function parse_ws_bin (line 16437) | function parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, ...
  function write_ws_bin_cell (line 16736) | function write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/,...
  function write_CELLTABLE (line 16793) | function write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::,...
  function write_MERGECELLS (line 16818) | function write_MERGECELLS(ba, ws/*:Worksheet*/) {
  function write_COLINFOS (line 16825) | function write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:W...
  function write_IGNOREECS (line 16832) | function write_IGNOREECS(ba, ws/*:Worksheet*/) {
  function write_HLINKS (line 16839) | function write_HLINKS(ba, ws/*:Worksheet*/, rels) {
  function write_LEGACYDRAWING (line 16848) | function write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {
  function write_AUTOFILTER (line 16857) | function write_AUTOFILTER(ba, ws, wb, idx) {
  function write_WSVIEWS2 (line 16883) | function write_WSVIEWS2(ba, ws, Workbook) {
  function write_WSFMTINFO (line 16898) | function write_WSFMTINFO(/*::ba, ws*/) {
  function write_SHEETPROTECT (line 16903) | function write_SHEETPROTECT(ba, ws) {
  function write_ws_bin (line 16909) | function write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {
  function parse_Cache (line 16964) | function parse_Cache(data/*:string*/)/*:[Array<number|string>, string, ?...
  function parse_chart (line 16985) | function parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, ...
  function parse_cs_xml (line 17013) | function parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*...
  function parse_BrtCsProp (line 17042) | function parse_BrtCsProp(data, length/*:number*/) {
  function parse_cs_bin (line 17049) | function parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, ...
  function push_defaults_array (line 17191) | function push_defaults_array(target, defaults) {
  function push_defaults (line 17202) | function push_defaults(target, defaults) {
  function parse_wb_defaults (line 17212) | function parse_wb_defaults(wb) {
  function safe1904 (line 17222) | function safe1904(wb/*:Workbook*/)/*:string*/ {
  function check_ws_name (line 17230) | function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {
  function check_wb_names (line 17243) | function check_wb_names(N, S, codes) {
  function check_wb (line 17253) | function check_wb(wb) {
  function parse_wb_xml (line 17274) | function parse_wb_xml(data, opts)/*:WorkbookFile*/ {
  function write_wb_xml (line 17432) | function write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ {
  function parse_BrtBundleSh (line 17520) | function parse_BrtBundleSh(data, length/*:number*/) {
  function write_BrtBundleSh (line 17528) | function write_BrtBundleSh(data, o) {
  function parse_BrtWbProp (line 17538) | function parse_BrtWbProp(data, length)/*:WBProps*/ {
  function write_BrtWbProp (line 17561) | function write_BrtWbProp(data/*:?WBProps*/, o) {
  function parse_BrtFRTArchID$ (line 17575) | function parse_BrtFRTArchID$(data, length) {
  function parse_BrtName (line 17584) | function parse_BrtName(data, length, opts) {
  function write_BrtName (line 17605) | function write_BrtName(name, wb) {
  function parse_wb_bin (line 17636) | function parse_wb_bin(data, opts)/*:WorkbookFile*/ {
  function write_BUNDLESHS (line 17746) | function write_BUNDLESHS(ba, wb/*::, opts*/) {
  function write_BrtFileVersion (line 17757) | function write_BrtFileVersion(data, o) {
  function write_BrtBookView (line 17768) | function write_BrtBookView(idx, o) {
  function write_BOOKVIEWS (line 17782) | function write_BOOKVIEWS(ba, wb/*::, opts*/) {
  function write_BRTNAMES (line 17798) | function write_BRTNAMES(ba, wb) {
  function write_SELF_EXTERNS_xlsb (line 17808) | function write_SELF_EXTERNS_xlsb(wb) {
  function write_EXTERNALS_xlsb (line 17819) | function write_EXTERNALS_xlsb(ba, wb) {
  function write_wb_bin (line 17847) | function write_wb_bin(wb, opts) {
  function parse_wb (line 17875) | function parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {
  function parse_ws (line 17880) | function parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb,...
  function parse_cs (line 17885) | function parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb,...
  function parse_ms (line 17890) | function parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb,...
  function parse_ds (line 17895) | function parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb,...
  function parse_sty (line 17900) | function parse_sty(data, name/*:string*/, themes, opts) {
  function parse_sst (line 17905) | function parse_sst(data, name/*:string*/, opts)/*:SST*/ {
  function parse_cmnt (line 17910) | function parse_cmnt(data, name/*:string*/, opts)/*:Array<RawComment>*/ {
  function parse_cc (line 17915) | function parse_cc(data, name/*:string*/, opts) {
  function parse_xlink (line 17920) | function parse_xlink(data, rel, name/*:string*/, opts) {
  function parse_xlmeta (line 17925) | function parse_xlmeta(data, name/*:string*/, opts) {
  function xlml_parsexmltag (line 17931) | function xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {
  function xlml_parsexmltagobj (line 17948) | function xlml_parsexmltagobj(tag/*:string*/) {
  function xlml_format (line 17971) | function xlml_format(format, value)/*:string*/ {
  function xlml_set_custprop (line 17977) | function xlml_set_custprop(Custprops, key, cp, val/*:string*/) {
  function safe_format_xlml (line 17990) | function safe_format_xlml(cell/*:Cell*/, nf, o) {
  function process_style_xlml (line 18012) | function process_style_xlml(styles, stag, opts) {
  function parse_xlml_data (line 18023) | function parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty...
  function xlml_prefix_dname (line 18090) | function xlml_prefix_dname(dname) {
  function xlml_clean_comment (line 18094) | function xlml_clean_comment(comment/*:any*/) {
  function parse_xlml_xml (line 18101) | function parse_xlml_xml(d, _opts)/*:Workbook*/ {
  function parse_xlml (line 18854) | function parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {
  function write_props_xlml (line 18865) | function write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {
  function write_wb_xlml (line 18874) | function write_wb_xlml(wb/*::, opts*/)/*:string*/ {
  function write_sty_xlml (line 18881) | function write_sty_xlml(wb, opts)/*:string*/ {
  function write_name_xlml (line 18893) | function write_name_xlml(n) { return writextag("NamedRange", null, {"ss:...
  function write_names_xlml (line 18894) | function write_names_xlml(wb/*::, opts*/)/*:string*/ {
  function write_ws_xlml_names (line 18907) | function write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/...
  function write_ws_xlml_wsopts (line 18925) | function write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb...
  function write_ws_xlml_comment (line 19032) | function write_ws_xlml_comment(comments/*:Array<any>*/)/*:string*/ {
  function write_ws_xlml_cell (line 19040) | function write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number...
  function write_ws_xlml_row (line 19084) | function write_ws_xlml_row(R/*:number*/, row)/*:string*/ {
  function write_ws_xlml_table (line 19094) | function write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/...
  function write_ws_xlml (line 19131) | function write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {
  function write_xlml (line 19150) | function write_xlml(wb, opts)/*:string*/ {
  function parse_compobj (line 19180) | function parse_compobj(obj/*:CFBEntry*/) {
  function slurp (line 19216) | function slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {
  function safe_format_xf (line 19252) | function safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boole...
  function make_cell (line 19276) | function make_cell(val, ixfe, t)/*:Cell*/ {
  function parse_workbook (line 19281) | function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
  function parse_xls_props (line 19794) | function parse_xls_props(cfb/*:CFBContainer*/, props, o) {
  function write_xls_props (line 19814) | function write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {
  function parse_xlscfb (line 19839) | function parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {
  function write_xlscfb (line 19887) | function write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContaine...
  function write_biff_rec (line 21240) | function write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, lengt...
  function write_biff_continue (line 21250) | function write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, ...
  function write_BIFF2Cell (line 21273) | function write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {
  function write_BIFF2BERR (line 21282) | function write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {
  function write_BIFF2LABEL (line 21290) | function write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {
  function write_ws_biff2_cell (line 21298) | function write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*...
  function write_ws_biff2 (line 21316) | function write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*...
  function write_biff2_buf (line 21339) | function write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
  function write_FONTS_biff8 (line 21353) | function write_FONTS_biff8(ba, data, opts) {
  function write_FMTS_biff8 (line 21364) | function write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {
  function write_FEAT (line 21372) | function write_FEAT(ba, ws) {
  function write_CELLXFS_biff8 (line 21388) | function write_CELLXFS_biff8(ba, opts) {
  function write_ws_biff8_hlinks (line 21395) | function write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {
  function write_ws_cols_biff8 (line 21404) | function write_ws_cols_biff8(ba, cols) {
  function write_ws_biff8_cell (line 21414) | function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*...
  function write_ws_biff8 (line 21443) | function write_ws_biff8(idx/*:number*/, opts, wb/*:Workbook*/) {
  function write_biff8_global (line 21518) | function write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {
  function write_biff8_buf (line 21601) | function write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
  function write_biff_buf (line 21628) | function write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {
  function html_to_sheet (line 21646) | function html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {
  function make_html_row (line 21704) | function make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:...
  function html_to_workbook (line 21742) | function html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {
  function make_html_preamble (line 21756) | function make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTM...
  function sheet_to_html (line 21761) | function sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:...
  function sheet_add_dom (line 21773) | function sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:...
  function parse_dom_table (line 21860) | function parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksh...
  function table_to_book (line 21866) | function table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {
  function is_dom_element_hidden (line 21872) | function is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {
  function get_get_computed_style_function (line 21881) | function get_get_computed_style_function(element/*:HTMLElement*/)/*:?fun...
  function parse_text_p (line 21889) | function parse_text_p(text/*:string*//*::, tag*/)/*:Array<any>*/ {
  function parse_ods_styles (line 21903) | function parse_ods_styles(d/*:string*/, _opts, _nfm) {
  function parse_content_xml (line 22125) | function parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {
  function parse_ods (line 22651) | function parse_ods(zip/*:ZIPFile*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function parse_fods (line 22663) | function parse_fods(data/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function write_number_format_ods (line 22703) | function write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:stri...
  function write_names_ods (line 22852) | function write_names_ods(Names, SheetNames, idx) {
  function write_ods (line 23108) | function write_ods(wb/*:any*/, opts/*:any*/) {
  function u8_to_dataview (line 23170) | function u8_to_dataview(array) {
  function u8str (line 23173) | function u8str(u8) {
  function stru8 (line 23176) | function stru8(str) {
  function u8concat (line 23179) | function u8concat(u8a) {
  function popcnt (line 23197) | function popcnt(x) {
  function readDecimal128LE (line 23202) | function readDecimal128LE(buf, offset) {
  function writeDecimal128LE (line 23209) | function writeDecimal128LE(buf, offset, value) {
  function parse_varint49 (line 23218) | function parse_varint49(buf, ptr) {
  function write_varint49 (line 23248) | function write_varint49(v) {
  function parse_packed_varints (line 23285) | function parse_packed_varints(buf) {
  function write_packed_varints (line 23292) | function write_packed_varints(nums) {
  function varint_to_i32 (line 23297) | function varint_to_i32(buf) {
  function varint_to_u64 (line 23314) | function varint_to_u64(buf) {
  function parse_shallow (line 23347) | function parse_shallow(buf) {
  function write_shallow (line 23394) | function write_shallow(proto) {
  function mappa (line 23410) | function mappa(data, cb) {
  function parse_iwa_file (line 23415) | function parse_iwa_file(buf) {
  function write_iwa_file (line 23441) | function write_iwa_file(ias) {
  function parse_snappy_chunk (line 23466) | function parse_snappy_chunk(type, buf) {
  function decompress_iwa_file (line 23551) | function decompress_iwa_file(buf) {
  function compress_iwa_file (line 23567) | function compress_iwa_file(buf) {
  function numbers_format_cell (line 23606) | function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
  function parse_old_storage (line 23720) | function parse_old_storage(buf, lut, v) {
  function parse_new_storage (line 23795) | function parse_new_storage(buf, lut) {
  function write_new_storage (line 23865) | function write_new_storage(cell, sst) {
  function write_old_storage (line 23897) | function write_old_storage(cell, sst) {
  function parse_cell_storage (line 23929) | function parse_cell_storage(buf, lut) {
  function parse_TSP_Reference (line 23943) | function parse_TSP_Reference(buf) {
  function write_TSP_Reference (line 23947) | function write_TSP_Reference(idx) {
  function numbers_add_oref (line 23953) | function numbers_add_oref(iwa, ref) {
  function numbers_del_oref (line 23962) | function numbers_del_oref(iwa, ref) {
  function parse_TST_TableDataList (line 23969) | function parse_TST_TableDataList(M, root) {
  function parse_TST_TileRowInfo (line 24006) | function parse_TST_TileRowInfo(u8, type) {
  function parse_TST_Tile (line 24038) | function parse_TST_Tile(M, root) {
  function parse_TST_TableModelArchive (line 24065) | function parse_TST_TableModelArchive(M, root, ws) {
  function parse_TST_TableInfoArchive (line 24130) | function parse_TST_TableInfoArchive(M, root, opts) {
  function parse_TN_SheetArchive (line 24142) | function parse_TN_SheetArchive(M, root, opts) {
  function parse_TN_DocumentArchive (line 24159) | function parse_TN_DocumentArchive(M, root, opts) {
  function parse_numbers_iwa (line 24182) | function parse_numbers_iwa(cfb, opts) {
  function write_TST_TileRowInfo (line 24232) | function write_TST_TileRowInfo(data, SST, wide) {
  function write_iwam (line 24314) | function write_iwam(type, payload) {
  function get_unique_msgid (line 24323) | function get_unique_msgid(dep, dependents) {
  function build_numbers_deps (line 24333) | function build_numbers_deps(cfb) {
  function write_numbers_iwa (line 24370) | function write_numbers_iwa(wb, opts) {
  function numbers_iwa_doit (line 24391) | function numbers_iwa_doit(cfb, deps, id, cb) {
  function numbers_iwa_find (line 24403) | function numbers_iwa_find(cfb, deps, id) {
  function numbers_add_ws (line 24413) | function numbers_add_ws(cfb, deps, wsidx) {
  function write_numbers_ws (line 24770) | function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
  function write_numbers_tma (line 24787) | function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
  function fix_opts_func (line 25042) | function fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}...
  function fix_read_opts (line 25052) | function fix_read_opts(opts) {
  function fix_write_opts (line 25075) | function fix_write_opts(opts) {
  function get_sheet_type (line 25088) | function get_sheet_type(n/*:string*/)/*:string*/ {
  function safe_parse_wbrels (line 25095) | function safe_parse_wbrels(wbrels, sheets) {
  function safe_parse_sheet (line 25103) | function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, she...
  function strip_front_slash (line 25144) | function strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0)...
  function parse_zip (line 25146) | function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function parse_xlsxcfb (line 25345) | function parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {
  function write_zip_xlsb (line 25390) | function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
  function write_zip_xlsx (line 25525) | function write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
  function firstbyte (line 25680) | function firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array<number>*/ {
  function read_cfb (line 25692) | function read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function read_zip (line 25697) | function read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function read_plaintext (line 25705) | function read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {
  function read_plaintext_raw (line 25715) | function read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workboo...
  function read_utf16 (line 25729) | function read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {
  function bstrify (line 25743) | function bstrify(data/*:string*/)/*:string*/ {
  function read_prn (line 25747) | function read_prn(data, d, o, str) {
  function readSync (line 25752) | function readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
  function readFileSync (line 25806) | function readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbo...
  function write_cfb_ctr (line 25810) | function write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {
  function write_zip (line 25821) | function write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
  function write_zip_type (line 25831) | function write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
  function write_zip_typeXLSX (line 25836) | function write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
  function write_zip_denouement (line 25841) | function write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {
  function write_cfb_type (line 25868) | function write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {
  function write_string_type (line 25874) | function write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?st...
  function write_stxt_type (line 25891) | function write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {
  function write_binary_type (line 25906) | function write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {
  function writeSyncXLSX (line 25921) | function writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {
  function writeSync (line 25930) | function writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {
  function resolve_book_type (line 25976) | function resolve_book_type(o/*:WriteFileOpts*/) {
  function writeFileSync (line 25990) | function writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?Wri...
  function writeFileSyncXLSX (line 25997) | function writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:...
  function writeFileAsync (line 26005) | function writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?Wr...
  function make_json_row (line 26019) | function make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, c...
  function sheet_to_json (line 26058) | function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {
  function make_csv_row (line 26114) | function make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, co...
  function sheet_to_csv (line 26139) | function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:st...
  function sheet_to_txt (line 26162) | function sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
  function sheet_to_formulae (line 26170) | function sheet_to_formulae(sheet/*:Worksheet*/)/*:Array<string>*/ {
  function sheet_add_json (line 26204) | function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:W...
  function json_to_sheet (line 26275) | function json_to_sheet(js/*:Array<any>*/, opts)/*:Worksheet*/ { return s...
  function ws_get_cell_stub (line 26278) | function ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {
  function wb_sheet_idx (line 26295) | function wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {
  function book_new (line 26307) | function book_new()/*:Workbook*/ {
  function book_append_sheet (line 26312) | function book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?st...
  function book_set_sheet_visibility (line 26331) | function book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/...
  function cell_set_number_format (line 26348) | function cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {
  function cell_set_hyperlink (line 26354) | function cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:...
  function cell_set_internal_link (line 26363) | function cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip...
  function cell_add_comment (line 26366) | function cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?stri...
  function sheet_set_array_formula (line 26372) | function sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:stri...
  function set_readable (line 26435) | function set_readable(R) { _Readable = R; }
  function write_csv_stream (line 26437) | function write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {
  function write_html_stream (line 26467) | function write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {
  function write_json_stream (line 26492) | function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {

FILE: src/15utility.js
  function nanToUndefined (line 28) | function nanToUndefined(s) {
  function undefinedOrValue (line 46) | function undefinedOrValue(s, r) {
  function returnTrue (line 57) | function returnTrue() {
  function returnUndefined (line 66) | function returnUndefined() {}
  function fetchData (line 441) | async function fetchData(path, success, error, async) {
  function getData (line 448) | function getData(path, success, error) {
  function getBinaryData (line 461) | function getBinaryData(path, success, error) {

FILE: src/17alasql.js
  function cleanupCache (line 257) | function cleanupCache(statement) {
  function adrunone (line 400) | function adrunone(data) {

FILE: src/21transaction.js
  class Transaction (line 9) | class Transaction {
    method constructor (line 17) | constructor(databaseid) {
    method commit (line 26) | commit() {
    method rollback (line 33) | rollback() {
    method exec (line 51) | exec(sql, params, cb) {

FILE: src/24view.js
  class View (line 10) | class View {
    method constructor (line 11) | constructor(params) {

FILE: src/25queryclass.js
  class Query (line 14) | class Query {
    method constructor (line 15) | constructor(params) {
  class Recordset (line 31) | class Recordset {
    method constructor (line 32) | constructor(params) {

FILE: src/28yy.js
  class Base (line 10) | class Base {
    method constructor (line 11) | constructor(params) {
    method toString (line 14) | toString() {}
    method toType (line 15) | toType() {}
    method toJS (line 16) | toJS() {}
    method exec (line 17) | exec() {}
    method compile (line 18) | compile() {}

FILE: src/30statements.js
  method constructor (line 10) | constructor(params) {
  method toString (line 14) | toString() {
  method compile (line 19) | compile(db) {

FILE: src/35search.js
  method constructor (line 18) | constructor(params) {
  method toString (line 22) | toString() {
  method toJS (line 29) | toJS(context) {
  method compile (line 34) | compile(databaseid) {
  method #doSearch (line 50) | #doSearch(databaseid, params, cb) {
  method PROP (line 739) | PROP(val, args, stope) {
  method APROP (line 762) | APROP(val, args) {
  method EQ (line 775) | EQ(val, args, stope, params) {
  method LIKE (line 786) | LIKE(val, args, stope, params) {
  method ATTR (line 807) | ATTR(val, args, stope) {
  method CONTENT (line 827) | CONTENT(val, args, stope) {
  method SHARP (line 834) | SHARP(val, args) {
  method PARENT (line 843) | PARENT(/*val,args,stope*/) {
  method CHILD (line 850) | CHILD(val, args, stope) {
  method KEYS (line 879) | KEYS(val) {
  method WHERE (line 889) | WHERE(val, args, stope, params) {
  method NAME (line 899) | NAME(val, args) {
  method CLASS (line 907) | CLASS(val, args) {
  method VERTEX (line 919) | VERTEX(val) {
  method INSTANCEOF (line 928) | INSTANCEOF(val, args) {
  method EDGE (line 937) | EDGE(val) {
  method EX (line 946) | EX(val, args, stope, params) {
  method RETURN (line 953) | RETURN(val, args, stope, params) {
  method REF (line 969) | REF(val) {
  method OUT (line 974) | OUT(val) {
  method OUTOUT (line 985) | OUTOUT(val) {
  method IN (line 1003) | IN(val) {
  method ININ (line 1014) | ININ(val) {
  method AS (line 1032) | AS(val, args) {
  method AT (line 1038) | AT(val, args) {
  method CLONEDEEP (line 1044) | CLONEDEEP(val) {
  method SET (line 1058) | SET(val, args, stope, params) {
  method ROW (line 1078) | ROW(val, args, stope, params) {
  method D3 (line 1088) | D3(val) {
  method ORDERBY (line 1097) | ORDERBY(val, args /*, stope */) {

FILE: src/38query.js
  function queryfn (line 2) | function queryfn(query, oldscope, cb, A, B) {
  function queryfn2 (line 62) | function queryfn2(data, idx, query) {
  function queryfn3 (line 84) | function queryfn3(query) {
  function doLimit (line 458) | function doLimit(query) {
  function doDistinct (line 477) | function doDistinct(query) {

FILE: src/39dojoin.js
  function doJoin (line 5) | function doJoin(query, scope, h) {
  function swapSources (line 159) | function swapSources(query, h) {

FILE: src/40select.js
  method constructor (line 16) | constructor(params) {
  method toString (line 20) | toString() {
  method toJS (line 141) | toJS(context) {
  method compile (line 154) | compile(databaseid, params) {
  method execute (line 526) | execute(databaseid, params, cb) {
  method compileWhereExists (line 531) | compileWhereExists(query) {
  method compileQueries (line 540) | compileQueries(query) {
  function modify (line 605) | function modify(query, res) {

FILE: src/41exists.js
  method constructor (line 11) | constructor(params) {
  method toString (line 15) | toString() {
  method toType (line 19) | toType() {
  method toJS (line 23) | toJS(context, tableid, defcols) {

FILE: src/422where.js
  function setupJoinOptimization (line 18) | function setupJoinOptimization(source, leftExpr, rightExpr) {
  function addSourceWhereCondition (line 28) | function addSourceWhereCondition(source, leftExpr, rightExpr) {
  function extractWhereConditions (line 111) | function extractWhereConditions(where) {
  function extractAliasesFromAst (line 138) | function extractAliasesFromAst(node) {
  function optimizeWhereJoin (line 163) | function optimizeWhereJoin(query, ast) {

FILE: src/423groupby.js
  function getGroupConcatParams (line 14) | function getGroupConcatParams(col) {

FILE: src/424select.js
  function compileSelectStar (line 16) | function compileSelectStar(query, aliases, joinstar) {
  function getArrowPath (line 135) | function getArrowPath(expr) {

FILE: src/43rollup.js
  function decartes (line 83) | function decartes(gv, query) {

FILE: src/45union.js
  method constructor (line 12) | constructor(params) {
  method toString (line 16) | toString() {
  method compile (line 20) | compile(tableid) {

FILE: src/46apply.js
  method constructor (line 10) | constructor(params) {
  method toString (line 14) | toString() {

FILE: src/47over.js
  method constructor (line 10) | constructor(params) {
  method toString (line 14) | toString() {

FILE: src/50expression.js
  class ExpressionStatement (line 4) | class ExpressionStatement {
    method constructor (line 6) | constructor(params) {
    method toString (line 14) | toString() {
    method execute (line 25) | execute(databaseid, params, cb) {
  class Expression (line 41) | class Expression {
    method constructor (line 42) | constructor(params) {
    method toString (line 50) | toString() {
    method findAggregator (line 68) | findAggregator(query) {
    method toJS (line 81) | toJS(context, tableid, defcols) {
    method compile (line 96) | compile(context, tableid, defcols) {
  class JavaScript (line 105) | class JavaScript {
    method constructor (line 106) | constructor(params) {
    method toString (line 110) | toString() {
    method toJS (line 115) | toJS() {
    method execute (line 119) | execute(databaseid, params, cb) {
  class Literal (line 130) | class Literal {
    method constructor (line 131) | constructor(params) {
    method toString (line 135) | toString() {
  class Join (line 145) | class Join {
    method constructor (line 146) | constructor(params) {
    method toString (line 150) | toString() {
  class Table (line 160) | class Table {
    method constructor (line 161) | constructor(params) {
    method toString (line 165) | toString() {
  class View (line 175) | class View {
    method constructor (line 176) | constructor(params) {
    method toString (line 180) | toString() {
  class Op (line 219) | class Op {
    method constructor (line 220) | constructor(params) {
    method toString (line 224) | toString() {
    method findAggregator (line 250) | findAggregator(query) {
    method toType (line 269) | toType(tableid) {
    method toJS (line 293) | toJS(context, tableid, defcols) {
  class VarValue (line 514) | class VarValue {
    method constructor (line 515) | constructor(params) {
    method toString (line 519) | toString() {
    method toType (line 523) | toType() {
    method toJS (line 527) | toJS() {
  class NumValue (line 532) | class NumValue {
    method constructor (line 533) | constructor(params) {
    method toString (line 537) | toString() {
    method toType (line 541) | toType() {
    method toJS (line 545) | toJS() {
  class StringValue (line 550) | class StringValue {
    method constructor (line 551) | constructor(params) {
    method toString (line 555) | toString() {
    method toType (line 559) | toType() {
    method toJS (line 563) | toJS() {
  class DomainValueValue (line 568) | class DomainValueValue {
    method constructor (line 569) | constructor(params) {
    method toString (line 573) | toString() {
    method toType (line 577) | toType() {
    method toJS (line 581) | toJS(context, tableid, defcols) {
  class ArrayValue (line 586) | class ArrayValue {
    method constructor (line 587) | constructor(params) {
    method toString (line 591) | toString() {
    method toType (line 595) | toType() {
    method toJS (line 599) | toJS(context, tableid, defcols) {
  class LogicValue (line 612) | class LogicValue {
    method constructor (line 613) | constructor(params) {
    method toString (line 617) | toString() {
    method toType (line 621) | toType() {
    method toJS (line 625) | toJS() {
  class NullValue (line 630) | class NullValue {
    method constructor (line 631) | constructor(params) {
    method toString (line 635) | toString() {
    method toJS (line 639) | toJS() {
  class ParamValue (line 644) | class ParamValue {
    method constructor (line 645) | constructor(params) {
    method toString (line 649) | toString() {
    method toJS (line 653) | toJS() {
  class UniOp (line 669) | class UniOp {
    method constructor (line 670) | constructor(params) {
    method toString (line 674) | toString() {
    method findAggregator (line 691) | findAggregator(query) {
    method toType (line 697) | toType() {
    method toJS (line 709) | toJS(context, tableid, defcols) {
  class Column (line 728) | class Column {
    method constructor (line 729) | constructor(params) {
    method needsBrackets (line 735) | static needsBrackets(id) {
    method wrapId (line 743) | static wrapId(id) {
    method toString (line 750) | toString() {
    method toJS (line 767) | toJS(context, tableid, defcols) {
  class AggrValue (line 819) | class AggrValue {
    method constructor (line 820) | constructor(params) {
    method toString (line 824) | toString() {
    method findAggregator (line 836) | findAggregator(query) {
    method toType (line 862) | toType() {
    method toJS (line 878) | toJS() {
  class OrderExpression (line 888) | class OrderExpression {
    method constructor (line 889) | constructor(params) {
  class GroupExpression (line 896) | class GroupExpression {
    method constructor (line 897) | constructor(params) {
    method toString (line 901) | toString() {

FILE: src/58json.js
  function JSONtoJS (line 47) | function JSONtoJS(obj, context, tableid, defcols) {

FILE: src/59convert.js
  function structuredDate (line 34) | function structuredDate(unFormattedDate) {

FILE: src/61date.js
  function newDate (line 193) | function newDate(d) {

FILE: src/63createvertex.js
  function findVertex (line 260) | function findVertex(name) {
  function createVertex (line 270) | function createVertex(g) {

FILE: src/67withselect.js
  function executeRecursiveCTE (line 38) | function executeRecursiveCTE(w, databaseid, params) {
  function mapColumnsToNames (line 143) | function mapColumnsToNames(data, sourceColumns, targetColumns) {

FILE: src/69while.js
  function createControlFlowException (line 10) | function createControlFlowException(name) {
  function runone (line 114) | function runone() {

FILE: src/80console.js
  function loghtml (line 165) | function loghtml(res) {
  function scrollTo (line 224) | function scrollTo(element, to, duration) {

FILE: src/831xls.js
  function toHTML (line 43) | function toHTML() {
  function style (line 316) | function style(a) {

FILE: src/832xlsxml.js
  function toXML (line 32) | function toXML() {

FILE: src/833xlsx.js
  function doExport (line 62) | function doExport() {
  function prepareSheet (line 86) | function prepareSheet(opts, data, columns, idx) {
  function saveWorkbook (line 172) | function saveWorkbook(cb) {

FILE: src/839zip.js
  function calculateCrc32 (line 14) | function calculateCrc32(buf) {
  function pack (line 71) | function pack(items) {
  function normalizeZipPath (line 105) | function normalizeZipPath(zipPath) {
  function buildZipBuffer (line 140) | function buildZipBuffer() {
  function deflateNext (line 280) | function deflateNext() {

FILE: src/843xml.js
  function xmlparse (line 24) | function xmlparse(xml) {

FILE: src/84from.js
  function potentialAutoConvert (line 262) | function potentialAutoConvert(val) {
  function parseText (line 269) | function parseText(text) {
  function XLSXLSX (line 423) | function XLSXLSX(X, filename, opts, cb, idx, query) {

FILE: src/91indexeddb.js
  function _databaseExists (line 18) | async function _databaseExists(name) {

FILE: src/94filestorage.js
  function wait (line 212) | function wait() {

FILE: src/99worker-start.js
  function alasql (line 26) | function alasql(sql,params,cb){

FILE: src/alasqlparser.js
  function popStack (line 2108) | function popStack (n) {
  function locateNearestErrorRecoveryRule (line 2149) | function locateNearestErrorRecoveryRule(state) {
  function Parser (line 3500) | function Parser () {

FILE: src/precompile/index.js
  function compileToJS (line 17) | function compileToJS(sql, databaseid) {

FILE: test/browserTestRunner.js
  function walkFiles (line 20) | function walkFiles(dir, reFilterYes, reFilterNo, oneFolderOnly, onlyFile...

FILE: test/coverage/lcov-report/prettify.js
  function k (line 1) | function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V...
  function a (line 1) | function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];v...
  function B (line 1) | function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T....
  function o (line 1) | function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){...
  function g (line 1) | function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];...
  function i (line 1) | function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\...
  function Q (line 1) | function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac...
  function D (line 1) | function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;...
  function c (line 1) | function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnPrope...
  function q (line 1) | function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default...
  function d (line 1) | function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.so...
  function y (line 1) | function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U...
  function b (line 1) | function b(ad){function Y(af){return document.getElementsByTagName(af)}v...

FILE: test/coverage/lcov-report/sorter.js
  function getTable (line 10) | function getTable() { return document.querySelector('.coverage-summary'); }
  function getTableHeader (line 12) | function getTableHeader() { return getTable().querySelector('thead tr'); }
  function getTableBody (line 14) | function getTableBody() { return getTable().querySelector('tbody'); }
  function getNthColumn (line 16) | function getNthColumn(n) { return getTableHeader().querySelectorAll('th'...
  function loadColumns (line 19) | function loadColumns() {
  function loadRowData (line 43) | function loadRowData(tableRow) {
  function loadData (line 62) | function loadData() {
  function sortByIndex (line 71) | function sortByIndex(index, desc) {
  function removeSortIndicators (line 102) | function removeSortIndicators() {
  function addSortIndicators (line 110) | function addSortIndicators() {
  function enableUI (line 114) | function enableUI() {

FILE: test/lib/assert/assert.js
  function f (line 39) | function f() {}
  function replacer (line 160) | function replacer(key, value) {
  function truncate (line 173) | function truncate(s, n) {
  function getMessage (line 181) | function getMessage(self) {
  function fail (line 202) | function fail(actual, expected, message, operator, stackStartFunction) {
  function ok (line 222) | function ok(value, message) {
  function _deepEqual (line 253) | function _deepEqual(actual, expected) {
  function isArguments (line 300) | function isArguments(object) {
  function objEquiv (line 304) | function objEquiv(a, b) {
  function expectedException (line 373) | function expectedException(actual, expected) {
  function _throws (line 389) | function _throws(shouldThrow, block, expected, message) {

FILE: test/lib/mocha/mocha.js
  function require (line 4) | function require(p) {
  function clonePath (line 71) | function clonePath(path) {
  function removeEmpty (line 74) | function removeEmpty(array) {
  function escapeHTML (line 83) | function escapeHTML(s) {
  function contextLines (line 274) | function contextLines(lines) {
  function eofNL (line 279) | function eofNL(curRange, i, current) {
  function isArray (line 469) | function isArray(obj) {
  function EventEmitter (line 479) | function EventEmitter() {}
  function on (line 514) | function on() {
  function Progress (line 653) | function Progress() {
  function Context (line 795) | function Context() {}
  function Hook (line 892) | function Hook(title, fn) {
  function F (line 901) | function F() {}
  function visit (line 1097) | function visit(obj, file) {
  function image (line 1456) | function image(name) {
  function Mocha (line 1478) | function Mocha(options) {
  function parse (line 1844) | function parse(str) {
  function shortFormat (line 1885) | function shortFormat(ms) {
  function longFormat (line 1901) | function longFormat(ms) {
  function plural (line 1915) | function plural(ms, n, name) {
  function Base (line 2141) | function Base(runner) {
  function pad (line 2246) | function pad(str, len) {
  function inlineDiff (line 2259) | function inlineDiff(err, escape) {
  function unifiedDiff (line 2296) | function unifiedDiff(err, escape) {
  function errorDiff (line 2331) | function errorDiff(err, type, escape) {
  function escapeInvisibles (line 2350) | function escapeInvisibles(line) {
  function colorLines (line 2363) | function colorLines(name, str) {
  function sameType (line 2381) | function sameType(a, b) {
  function Doc (line 2409) | function Doc(runner) {
  function Dot (line 2474) | function Dot(runner) {
  function F (line 2515) | function F() {}
  function HTMLCov (line 2542) | function HTMLCov(runner) {
  function coverageClass (line 2568) | function coverageClass(n) {
  function HTML (line 2621) | function HTML(runner) {
  function error (line 2792) | function error(msg) {
  function fragment (line 2800) | function fragment(html) {
  function hideSuitesWithout (line 2822) | function hideSuitesWithout(classname) {
  function unhide (line 2834) | function unhide() {
  function text (line 2845) | function text(el, str) {
  function on (line 2857) | function on(el, event, fn) {
  function JSONCov (line 2907) | function JSONCov(runner, output) {
  function map (line 2950) | function map(cov) {
  function coverage (line 2989) | function coverage(filename, data) {
  function clean (line 3030) | function clean(test) {
  function List (line 3060) | function List(runner) {
  function clean (line 3093) | function clean(test) {
  function JSONReporter (line 3124) | function JSONReporter(runner) {
  function clean (line 3170) | function clean(test) {
  function Landing (line 3222) | function Landing(runner) {
  function F (line 3276) | function F() {}
  function List (line 3304) | function List(runner) {
  function F (line 3345) | function F() {}
  function Markdown (line 3372) | function Markdown(runner) {
  function Min (line 3465) | function Min(runner) {
  function F (line 3482) | function F() {}
  function NyanCat (line 3509) | function NyanCat(runner) {
  function draw (line 3573) | function draw(color, n) {
  function write (line 3740) | function write(string) {
  function F (line 3748) | function F() {}
  function Progress (line 3783) | function Progress(runner, options) {
  function F (line 3846) | function F() {}
  function Spec (line 3874) | function Spec(runner) {
  function F (line 3933) | function F() {}
  function TAP (line 3961) | function TAP(runner) {
  function title (line 4009) | function title(test) {
  function XUnit (line 4046) | function XUnit(runner) {
  function F (line 4090) | function F() {}
  function test (line 4099) | function test(test) {
  function tag (line 4127) | function tag(name, attrs, close, content) {
  function cdata (line 4145) | function cdata(str) {
  function Runnable (line 4189) | function Runnable(title, fn) {
  function F (line 4204) | function F() {}
  function multiple (line 4345) | function multiple(err) {
  function done (line 4352) | function done(err) {
  function callFn (line 4404) | function callFn(fn) {
  function Runner (line 4474) | function Runner(suite) {
  function F (line 4504) | function F() {}
  function next (line 4674) | function next(i) {
  function next (line 4723) | function next(suite) {
  function hookErr (line 4823) | function hookErr(err, errSuite, after) {
  function next (line 4847) | function next(err, errSuite) {
  function next (line 4920) | function next(errSuite) {
  function done (line 4941) | function done(errSuite) {
  function uncaught (line 5000) | function uncaught(err) {
  function filterLeaks (line 5046) | function filterLeaks(ok, globals) {
  function extraGlobals (line 5078) | function extraGlobals() {
  function Suite (line 5143) | function Suite(title, parentContext) {
  function F (line 5166) | function F() {}
  function Test (line 5472) | function Test(title, fn) {
  function F (line 5482) | function F() {}
  function ignored (line 5648) | function ignored(path) {
  function highlight (line 5770) | function highlight(js) {
  function timeslice (line 5929) | function timeslice() {

FILE: test/lib/zt/zt.js
  function zt (line 15) | function zt(name, times, cb) {

FILE: test/performance/#1027/perf-comparison.js
  function setupTables (line 28) | function setupTables(dbName) {
  function loadDataWithInsert (line 42) | function loadDataWithInsert(dbName) {
  function loadDataDirect (line 62) | function loadDataDirect(dbName) {
  function verifyIndices (line 85) | function verifyIndices(dbName) {
  function runQueryTest (line 102) | function runQueryTest(dbName) {
  function printResults (line 140) | function printResults(method, loadTime, indices, queryStats) {

FILE: test/performance/#118/perf-cartesian.js
  function setupTables (line 28) | function setupTables(numTables) {
  function generateQuery (line 43) | function generateQuery(numTables) {
  function cartesianSize (line 66) | function cartesianSize(numTables, rowsPerTable) {

FILE: test/performance/benchmark_alasql.js
  function genRandomVal (line 13) | function genRandomVal() {
  function initializeDB (line 22) | function initializeDB() {
  function testperfFind (line 62) | function testperfFind() {

FILE: test/test001.js
  function prepareData (line 6) | function prepareData(defined) {
  function doTests (line 119) | function doTests() {

FILE: test/test127.sql
  type one (line 1) | create table one (a int, b int, c string)

FILE: test/test128.sql
  type one (line 1) | create table one (a int, b int, c string)

FILE: test/test143.js
  function test143 (line 33) | function test143(dontcache) {

FILE: test/test198-1.sql
  type Customers (line 3) | CREATE TABLE Customers
  type Orders (line 12) | CREATE TABLE Orders

FILE: test/test2169.js
  function runTest (line 21) | function runTest(testName, sql, params = [testData]) {

FILE: test/test233.sql
  type wages (line 3) | CREATE TABLE wages

FILE: test/test234.sql
  type people (line 1) | CREATE TABLE people (

FILE: test/test286.js
  function test (line 9) | function test(M) {

FILE: test/test293.js
  function t (line 11) | function t(n, t) {
  function r (line 16) | function r(n, t) {
  function e (line 19) | function e(n, e, o, u, c, f) {
  function o (line 22) | function o(n, t, r, o, u, c, f) {
  function u (line 25) | function u(n, t, r, o, u, c, f) {
  function c (line 28) | function c(n, t, r, o, u, c, f) {
  function f (line 31) | function f(n, t, r, o, u, c, f) {
  function i (line 34) | function i(n, r) {
  function a (line 120) | function a(n) {
  function h (line 127) | function h(n) {
  function d (line 134) | function d(n) {
  function l (line 137) | function l(n, t) {
  function g (line 147) | function g(n) {
  function v (line 156) | function v(n) {
  function m (line 159) | function m(n) {
  function p (line 162) | function p(n) {
  function s (line 165) | function s(n, t) {
  function C (line 168) | function C(n, t) {
  function A (line 171) | function A(n, t, r) {

FILE: test/test324.sql
  type dbo (line 8) | CREATE TABLE dbo.Employees
  type idx_unc_mgrid_empid (line 33) | CREATE UNIQUE INDEX idx_unc_mgrid_empid ON dbo.Employees(mgrid, empid)
  type dbo (line 50) | CREATE TABLE dbo.Parts
  type dbo (line 75) | CREATE TABLE dbo.BOM
  type dbo (line 130) | CREATE TABLE dbo.Cities
  type dbo (line 153) | CREATE TABLE dbo.Roads

FILE: test/test378.js
  function range (line 8) | function range(i) {

FILE: test/test404.sql
  type colors (line 1) | create table colors (id int, name varchar(255))
  type fruits (line 2) | create table fruits (id int, name varchar(255))
  type mascots (line 3) | create table mascots (id int, name varchar(255))

FILE: test/test408.js
  function jsDateAdd (line 84) | function jsDateAdd(period, interval, date) {
  function jsDateAdd (line 167) | function jsDateAdd(period, interval, date) {

FILE: test/test418.js
  function testRequest (line 26) | async function testRequest(expected, url, headers, done) {

FILE: test/test627.js
  function data (line 55) | function data() {

FILE: types/alasql.d.ts
  type AlaSQLCallback (line 7) | interface AlaSQLCallback<T = unknown> {
  type AlaSQLOptions (line 11) | interface AlaSQLOptions {
  type AlaSQLStatement (line 38) | interface AlaSQLStatement {
  type AlaSQLAST (line 43) | interface AlaSQLAST {
  type userDefinedFunction (line 48) | interface userDefinedFunction {
  type userDefinedFunctionLookUp (line 52) | interface userDefinedFunctionLookUp {
  type userAggregator (line 57) | interface userAggregator {
  type userAggregatorLookUp (line 61) | interface userAggregatorLookUp {
  type userFromFunction (line 65) | interface userFromFunction {
  type userFromFunctionLookUp (line 75) | interface userFromFunctionLookUp {
  type database (line 84) | interface database {
  type table (line 107) | interface table {
  type databaseLookUp (line 122) | interface databaseLookUp {
  type tableLookUp (line 131) | interface tableLookUp {
  type Database (line 135) | interface Database {
  type AlaSQL (line 153) | interface AlaSQL {
Copy disabled (too large) Download .json
Condensed preview — 899 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,980K chars).
[
  {
    "path": ".editorconfig",
    "chars": 236,
    "preview": "; EditorConfig file: https://EditorConfig.org\n; Install the \"EditorConfig\" plugin into your editor to use\n\nroot = true\n\n"
  },
  {
    "path": ".eslintignore",
    "chars": 32,
    "preview": "**/*.min.js\nsrc/alasqlparser.js\n"
  },
  {
    "path": ".gitattributes",
    "chars": 293,
    "preview": "\n*.xlsx binary\n*.xls binary\nyarn.lock binary \n\n/dist/* binary merge=ours\n*.min.js binary\n\n# absolute paths are ok, as ar"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 1517,
    "preview": "# Contributing to making AlaSQL better\n\n\nGot questions? [Tag a Stack Overflow question](http://stackoverflow.com/questio"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 539,
    "preview": "\nAlaSQL is based on unpaid voluntary work. Thank you for taking the time to make it better.\n\n\nGot ChatGPT?\n============\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 55,
    "preview": "\nThank you for the time you are putting into AlaSQL!\n\n\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 1601,
    "preview": "# GitHub Copilot Instructions for AlaSQL\n\n## About This Project\n\nAlaSQL is an open source SQL database for JavaScript wi"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 196,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: github-actions\n    directory: /\n    schedule:\n      interval: monthly\n\n  - pa"
  },
  {
    "path": ".github/renovate.json5",
    "chars": 364,
    "preview": "{\n  $schema: \"https://docs.renovatebot.com/renovate-schema.json\",\n  extends: [\"config:recommended\"],\n  packageRules: [\n "
  },
  {
    "path": ".github/workflows/Build and test.yml",
    "chars": 5004,
    "preview": "name: 'CI build & test'\n\non:\n  push:\n    branches: '*'\n  pull_request:\n    branches: '*'\n\npermissions: read-all\n\njobs:\n "
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 1259,
    "preview": "name: 'Code quality'\n\non:\n  push:\n    branches: ['develop']\n  schedule:\n    - cron: '32 13 * * 0'\n\npermissions:\n  conten"
  },
  {
    "path": ".github/workflows/dependency-review.yml",
    "chars": 985,
    "preview": "# Dependency Review Action\n#\n# This Action will scan dependency manifest files that change as part of a Pull Request,\n# "
  },
  {
    "path": ".github/workflows/scorecard.yml",
    "chars": 2134,
    "preview": "name: Scorecard analysis\non:\n  push:\n    # Only the default branch is supported.\n    branches:\n      - develop\n  schedul"
  },
  {
    "path": ".gitignore",
    "chars": 233,
    "preview": "# Results of tests\ntest/res*\nnode_modules/\nnpm-debug.log\nsite/\ntest/test604.json\ntest/test251.xlsx\n.versions\n.npm/\n*.log"
  },
  {
    "path": ".husky/.gitignore",
    "chars": 2,
    "preview": "_\n"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 71,
    "preview": "yarn test-format || (echo please format using 'yarn format' && exit 1)\n"
  },
  {
    "path": ".husky/pre-push",
    "chars": 71,
    "preview": "yarn test-format || (echo please format using 'yarn format' && exit 1)\n"
  },
  {
    "path": ".npmignore",
    "chars": 68,
    "preview": "examples/\ntest/\nsrc/\n*.md\ngulpfile.js\nyarn.lock\ntslint.json\n.*\n*.log"
  },
  {
    "path": ".prettierignore",
    "chars": 164,
    "preview": "src/10start.js\n\nsrc/98finish.js\n\nsrc/99worker-finish.js\n\nsrc/99worker-start.js\n\nsrc/alasqlparser.js\n\nsrc/97saveas.js\n\nmo"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 30477,
    "preview": "# Changelog\r\n\r\nPlease see https://github.com/AlaSQL/alasql/releases for more info...\r\n\r\n## 0.7.1 (2021-03-05)\r\n\r\n- Bump:"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1438,
    "preview": "# How to Contribute to AlaSQL\n\nThank you very much for your interest! AlaSQL has a lot of thing to be improved, and your"
  },
  {
    "path": "LICENSE",
    "chars": 1103,
    "preview": "MIT License\r\n\r\nCopyright (c) 2014 - present  Andrey Gershun\r\n\r\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "README.md",
    "chars": 27792,
    "preview": "- _AlaSQL is an unfunded open source project installed 650k+ times each month. [Please donate your time](https://github."
  },
  {
    "path": "RELEASES.md",
    "chars": 1826,
    "preview": "# Releases Plan\r\n\r\n## Target\r\nThe target for AlaSQLdevelopment is a small compact library with size less than 200kb with"
  },
  {
    "path": "SECURITY.md",
    "chars": 251,
    "preview": "Hi\n\nLovely to hear you found a problem. Lets solve it together. \n\nIf you dont feel like writing an issue about it you ar"
  },
  {
    "path": "TESTLOG.md",
    "chars": 2875,
    "preview": "# Testlog for AlaSQL\n\nList of final results from [different test runs](https://github.com/alasql/alasql/tree/develop/tes"
  },
  {
    "path": "bin/alaserver.js",
    "chars": 687,
    "preview": "#!/usr/bin/env node\n//\n// alaserver.js = Alasql Server\n// Date: 25.11.2014\n// (c) 2014, Andrey Gershun\n//\n\nvar alasql = "
  },
  {
    "path": "bin/alasql-cli.js",
    "chars": 4593,
    "preview": "#!/usr/bin/env node\n\n//\n// Command line interface for Alasql\n// Version: 0.2.3\n// Date: 28.07.2015\n// (c) 2014-2022, And"
  },
  {
    "path": "build.sh",
    "chars": 5209,
    "preview": "rm -fr dist/\nmkdir dist/\n\nif ! command -v \"rexreplace\" > /dev/null 2>&1; then\n\techo \"\\nSpeed up the process by having re"
  },
  {
    "path": "docs/PRECOMPILE.md",
    "chars": 2938,
    "preview": "\n### Transform SQL to JavaScript code\n\nIf you want to fiddle with speed you can pre-generate the JS code that will be ru"
  },
  {
    "path": "examples/angular/import-export-excel/import-export-to-excel.factory.js",
    "chars": 717,
    "preview": "(function () {\n\t'use strict';\n\n\tangular.module('jfy').factory('ImportExportToExcel', ImportExportToExcel);\n\n\tfunction Im"
  },
  {
    "path": "examples/angular/import-export-excel/import-from-excel.directive.js",
    "chars": 391,
    "preview": "(function () {\n\t'use strict';\n\n\tangular.module('jfy').directive('importFromExcel', importFromExcel);\n\n\tfunction importFr"
  },
  {
    "path": "examples/angular/import-export-excel/test.controller.js",
    "chars": 447,
    "preview": "(function () {\n\t'use strict';\n\n\tangular.module('jfy').controller('TestController', TestController);\n\n\t/** @ngInject */\n\t"
  },
  {
    "path": "examples/angular/import-export-excel/test.html",
    "chars": 226,
    "preview": "<div class=\"container_body store-record\">\n    <button class=\"btn btn-primary\" ng-click=\"tc.export()\">导出</button>\n    <p>"
  },
  {
    "path": "examples/country/city.js",
    "chars": 517,
    "preview": "var alasql = require('../../alasql');\n\nalasql.from.csv = function (filename, opts) {\n\tvar fs = require('fs');\n\t//\tconsol"
  },
  {
    "path": "examples/nodesample.js",
    "chars": 326,
    "preview": "//\n// AlaSQL node.js sample\n//\n\nvar alasql = require('alasql');\n\nvar db = new alasql.Database();\n\ndb.exec('CREATE TABLE "
  },
  {
    "path": "examples/other/test.js",
    "chars": 627,
    "preview": "var alasql = require('../../alasql');\n\nvar groups = [\n\t{id: 4, name: 'abcd', id_group: '1'},\n\t{id: 5, name: 'efgh', id_"
  },
  {
    "path": "examples/param.js",
    "chars": 167,
    "preview": "var alasql = require('alasql');\n\nvar data = [{a: 0}, {a: 1}, {a: 2}, {a: 3}, {a: 4}];\n\nvar res = alasql('SELECT * FROM ?"
  },
  {
    "path": "examples/precompile/build/myCode.bundle.js",
    "chars": 2394355,
    "preview": "import {createRequire} from 'node:module';\nvar __create = Object.create;\nvar __getProtoOf = Object.getPrototypeOf;\nvar _"
  },
  {
    "path": "examples/precompile/build/myCodeIsolate.bundle.js",
    "chars": 4211,
    "preview": "// myCodeIsolate.js\nvar selectProductsIsolated = new Function(\n\t'return ' +\n\t\t`(function(params, cb) {\n  // All compiled"
  },
  {
    "path": "examples/precompile/build.sh",
    "chars": 379,
    "preview": "#!/usr/bin/env bash\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\ncd \"$SCRIPT_DIR\"\n\nrm -fr build/\nmkdir bu"
  },
  {
    "path": "examples/precompile/myCode.js",
    "chars": 826,
    "preview": "import alasql from '../../dist/alasql.fs.js';\n\n// Import the pre-compiled function source code using a Bun macro.\n// Thi"
  },
  {
    "path": "examples/promise.js",
    "chars": 332,
    "preview": "// Async select\n\nvar db = require('alasql');\n\ndb('CREATE TABLE test (language INT, hello STRING)');\ndb(\"INSERT INTO test"
  },
  {
    "path": "examples/simple/ex102.js",
    "chars": 417,
    "preview": "// require(['../../alasql.js'], function(alasql) {\n// \talasql('CREATE TABLE test1 (a int, b int, c int)');\n// \talasql('I"
  },
  {
    "path": "examples/sqlite/test.js",
    "chars": 166,
    "preview": "var fs = require('fs');\nvar SQL = require('./sql.js');\nvar data = fs.readFileSync('./Chinook_Sqlite.sqlite');\nvar sqldb "
  },
  {
    "path": "modules/xlsx/CHANGELOG.md",
    "chars": 8191,
    "preview": "# CHANGELOG\n\nThis log is intended to keep track of backwards-incompatible changes, including\nbut not limited to API chan"
  },
  {
    "path": "modules/xlsx/LICENSE",
    "chars": 11355,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "modules/xlsx/README.md",
    "chars": 1580,
    "preview": "# [SheetJS](https://sheetjs.com)\n\nThe SheetJS Community Edition offers battle-tested open-source solutions for\nextractin"
  },
  {
    "path": "modules/xlsx/bin/xlsx.njs",
    "chars": 11005,
    "preview": "#!/usr/bin/env node\n/* xlsx.js (C) 2013-present  SheetJS -- http://sheetjs.com */\n/* eslint-env node */\n/* vim: set ts=2"
  },
  {
    "path": "modules/xlsx/bower.json",
    "chars": 296,
    "preview": "{\n  \"name\": \"js-xlsx\",\n  \"homepage\": \"https://github.com/SheetJS/js-xlsx\",\n  \"main\": [\"xlsx.js\"],\n  \"ignore\": [\n    \"bin"
  },
  {
    "path": "modules/xlsx/dist/LICENSE",
    "chars": 11355,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "modules/xlsx/dist/cpexcel.d.ts",
    "chars": 1063,
    "preview": "/* codepage.js (C) 2013-present SheetJS -- http://sheetjs.com */\n// TypeScript Version: 2.2\n\n/** Codepage index type (in"
  },
  {
    "path": "modules/xlsx/dist/cpexcel.full.mjs",
    "chars": 230741,
    "preview": "/*! cpexcel.mjs (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W100 */\nexport const version = \"1.15.0\";\ncon"
  },
  {
    "path": "modules/xlsx/dist/cpexcel.js",
    "chars": 229607,
    "preview": "/*! cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W100 */\nvar cptable = {version:\"1.15.0\"};\ncpt"
  },
  {
    "path": "modules/xlsx/dist/xlsx.extendscript.js",
    "chars": 920923,
    "preview": "/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*! shim.js (C) 2013-present SheetJS -- http://sheetjs.co"
  },
  {
    "path": "modules/xlsx/dist/xlsx.zahl.js",
    "chars": 127392,
    "preview": "var XLSX_ZAHL_PAYLOAD = \"UEsDBBQAAAAAAN1+L1Vf8LqQpRsAAKUbAAASAAAASW5kZXgvRG9jdW1lbnQuaXdhAKEbAOVf8GU4CAESNAgBEgMBAAUY4ws"
  },
  {
    "path": "modules/xlsx/dist/xlsx.zahl.mjs",
    "chars": 127186,
    "preview": "var XLSX_ZAHL_PAYLOAD = \"UEsDBBQAAAAAAN1+L1Vf8LqQpRsAAKUbAAASAAAASW5kZXgvRG9jdW1lbnQuaXdhAKEbAOVf8GU4CAESNAgBEgMBAAUY4ws"
  },
  {
    "path": "modules/xlsx/dist/zahl.d.ts",
    "chars": 143,
    "preview": "/* zahl.d.ts (C) 2022-present SheetJS */\n// TypeScript Version: 2.2\ndeclare const XLSX_ZAHL_PAYLOAD: string;\nexport defa"
  },
  {
    "path": "modules/xlsx/package.ori.json",
    "chars": 3013,
    "preview": "{\n\t\"name\": \"xlsx\",\n\t\"version\": \"0.19.3\",\n\t\"author\": \"sheetjs\",\n\t\"description\": \"SheetJS Spreadsheet data parser and writ"
  },
  {
    "path": "modules/xlsx/types/index.d.ts",
    "chars": 25887,
    "preview": "/* index.d.ts (C) 2015-present SheetJS and contributors */\n// TypeScript Version: 2.2\n// import * as CFB from \"cfb\";\n// "
  },
  {
    "path": "modules/xlsx/types/tsconfig.json",
    "chars": 380,
    "preview": "{\n    \"compilerOptions\": {\n        \"module\": \"commonjs\",\n        \"lib\": [ \"es5\" ],\n        \"noImplicitAny\": true,\n      "
  },
  {
    "path": "modules/xlsx/xlsx.js",
    "chars": 913294,
    "preview": "/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global global, e"
  },
  {
    "path": "modules/xlsx/xlsx.mjs",
    "chars": 973983,
    "preview": "/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:f"
  },
  {
    "path": "modules/xlsx/xlsxworker.js",
    "chars": 454,
    "preview": "/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\nimportScripts('dist/shim.min.js');\n/* uncomment the next li"
  },
  {
    "path": "package.json",
    "chars": 4876,
    "preview": "{\n\t\"name\": \"alasql\",\n\t\"description\": \"Use SQL to select and filter javascript data - including relational joins and sear"
  },
  {
    "path": "src/05copyright.js",
    "chars": 1373,
    "preview": "//! AlaSQL vPACKAGE_VERSION build: BUILD_VERSION | © 2014-2025 Andrey Gershun & Mathias Wulff | License: MIT\n/*\n@module "
  },
  {
    "path": "src/10start.js",
    "chars": 3409,
    "preview": "/* eslint-disable */\n\n\"use strict\";\n\n/**\n\t@fileoverview AlaSQL JavaScript SQL library\n\t@see http://github.com/alasql/ala"
  },
  {
    "path": "src/12pretty.js",
    "chars": 548,
    "preview": "/**\n   12prettyflag.js - prettify\n   @todo move this functionality to plugin\n*/\n\n/**\n\t  Pretty flag - nice HTML output o"
  },
  {
    "path": "src/15utility.js",
    "chars": 33428,
    "preview": "/*jshint unused:false*/\n/*\n\tUtilities for Alasql.js\n\n\t@todo Review the list of utilities\n\t@todo Find more effective util"
  },
  {
    "path": "src/16comments.js",
    "chars": 2393,
    "preview": "/**\n\t  Strip all comments.\n\t  @function\n\t  @param {string} str\n\t  @return {string}\n\t  Based om the https://github.com/le"
  },
  {
    "path": "src/17alasql.js",
    "chars": 9979,
    "preview": "/**\n\tDatabase class for Alasql.js\n*/\n\n// Initial parameters\n\n/**\n\tJison parser\n*/\nalasql.parser = alasqlparser;\n\n/*/* Th"
  },
  {
    "path": "src/18promise.js",
    "chars": 2014,
    "preview": "//\n// Promises for AlaSQL\n//\n\nif (!utils.global.Promise) {\n\tutils.global.Promise = Promise;\n}\n\nvar promiseExec = functio"
  },
  {
    "path": "src/20database.js",
    "chars": 3420,
    "preview": "/*\n//\n// Database class for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// Main Database class\n\n/**"
  },
  {
    "path": "src/21transaction.js",
    "chars": 1850,
    "preview": "/*\n//\n// Transaction class for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nclass Transaction {\n\ttra"
  },
  {
    "path": "src/23table.js",
    "chars": 1201,
    "preview": "/*\n//\n// Table class for Alasql.js\n// Date: 14.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// Table class\nvar Table = (al"
  },
  {
    "path": "src/24view.js",
    "chars": 463,
    "preview": "/*\n//\n// View class for Alasql.js\n// Date: 14.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// Table class\nclass View {\n\tco"
  },
  {
    "path": "src/25queryclass.js",
    "chars": 579,
    "preview": "/*\n//\n// Query class for Alasql.js\n// Date: 14.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// Table class\n\n/**\n @class Qu"
  },
  {
    "path": "src/28yy.js",
    "chars": 1690,
    "preview": "/*\n//\n// Parser helper for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// Base class for all yy cla"
  },
  {
    "path": "src/30statements.js",
    "chars": 579,
    "preview": "/*\n//\n// Statements class for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Statements = class Sta"
  },
  {
    "path": "src/35search.js",
    "chars": 31272,
    "preview": "/* global alasql */\n/* global yy */\n/*\n//\n// SEARCH for Alasql.js\n// Date: 04.05.2015\n// (c) 2015, Andrey Gershun\n//\n*/\n"
  },
  {
    "path": "src/38query.js",
    "chars": 19168,
    "preview": "// Main query procedure\nfunction queryfn(query, oldscope, cb, A, B) {\n\tquery.sourceslen = query.sources.length;\n\tlet sle"
  },
  {
    "path": "src/39dojoin.js",
    "chars": 4879,
    "preview": "//\n// Join all lines over sources\n//\n\nfunction doJoin(query, scope, h) {\n\t// Check, if this is a last join?\n\tif (h >= qu"
  },
  {
    "path": "src/40select.js",
    "chars": 21248,
    "preview": "/*\n//\n// Select run-time part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n//\n// Main part of SE"
  },
  {
    "path": "src/41exists.js",
    "chars": 1354,
    "preview": "/*\n//\n// EXISTS and other subqueries functions for AlaSQL.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n// Modified"
  },
  {
    "path": "src/420from.js",
    "chars": 6053,
    "preview": "/*\n//\n// Select compiler part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global yy, alasql,"
  },
  {
    "path": "src/421join.js",
    "chars": 9229,
    "preview": "/*\n//\n// Select compiler part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// SELECT Compile fun"
  },
  {
    "path": "src/422where.js",
    "chars": 6690,
    "preview": "yy.Select.prototype.compileWhere = function (query) {\n\tif (this.where) {\n\t\tif (typeof this.where == 'function') {\n\t\t\tret"
  },
  {
    "path": "src/423groupby.js",
    "chars": 19756,
    "preview": "/*\n//\n// Select compiler part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/**\n * Helper to get "
  },
  {
    "path": "src/424select.js",
    "chars": 23890,
    "preview": "/*\n//\n// Select compiler part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// yy.Select.prototyp"
  },
  {
    "path": "src/425having.js",
    "chars": 285,
    "preview": "/* global yy */\n\nyy.Select.prototype.compileHaving = function (query) {\n\tif (this.having) {\n\t\tvar s = this.having.toJS('"
  },
  {
    "path": "src/426orderby.js",
    "chars": 5873,
    "preview": "yy.Select.prototype.compileOrder = function (query, params) {\n\tvar self = this;\n\tself.orderColumns = [];\n\tif (this.order"
  },
  {
    "path": "src/427pivot.js",
    "chars": 10085,
    "preview": "// Pivot functions\n/**\n\tCompile Pivot functions\n\t@param {object} query Source query\n\t@return {function} Pivoting functio"
  },
  {
    "path": "src/43rollup.js",
    "chars": 3417,
    "preview": "/*\n//\n// ROLLUP(), CUBE(), GROUPING SETS() for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/**\n Cal"
  },
  {
    "path": "src/44defcols.js",
    "chars": 2681,
    "preview": "/*\n//\n// Select run-time part for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Select.prototype.c"
  },
  {
    "path": "src/45union.js",
    "chars": 271,
    "preview": "/*\n//\n// UNION for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n// SELECT UNION statement\n\nyy.Union "
  },
  {
    "path": "src/46apply.js",
    "chars": 329,
    "preview": "/*\n//\n// CROSS AND OUTER APPLY for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Apply = class App"
  },
  {
    "path": "src/47over.js",
    "chars": 424,
    "preview": "/*\n//\n// CROSS AND OUTER APPLY for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Over = class Over"
  },
  {
    "path": "src/50expression.js",
    "chars": 23683,
    "preview": "{\n\tconst assign = Object.assign;\n\n\tclass ExpressionStatement {\n\t\t/** @param {object} params Initial parameters */\n\t\tcons"
  },
  {
    "path": "src/52linq.js",
    "chars": 3969,
    "preview": "// Alasql Linq library\n\nyy.FromData = function (params) {\n\treturn yy.extend(this, params);\n};\nyy.FromData.prototype.toSt"
  },
  {
    "path": "src/55functions.js",
    "chars": 14285,
    "preview": "/*\n//\n// Functions for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.FuncValue = function (params)"
  },
  {
    "path": "src/56sprintf.js",
    "chars": 5206,
    "preview": "/**\n * SPRINTF(format, argument_list)\n *\n * The string function like one in C/C++, PHP, Perl\n * Each conversion specific"
  },
  {
    "path": "src/57case.js",
    "chars": 2064,
    "preview": "/*\n//\n// CASE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.CaseValue = function (params) {\n\tr"
  },
  {
    "path": "src/58json.js",
    "chars": 2258,
    "preview": "/*\n//\n// JSON for Alasql.js\n// Date: 19.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Json = function (params) {\n\treturn"
  },
  {
    "path": "src/59convert.js",
    "chars": 6009,
    "preview": "/*\n//\n// CAST and CONVERT functions\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Convert = function (params"
  },
  {
    "path": "src/60createtable.js",
    "chars": 19404,
    "preview": "/*\n//\n// CREATE TABLE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global alasql, yy, hash */"
  },
  {
    "path": "src/61date.js",
    "chars": 4323,
    "preview": "//\n// Date functions\n//\n// (c) 2014, Andrey Gershun\n//\n\n/** Standard JavaScript data types */\n\nalasql.fn.Date = Object;\n"
  },
  {
    "path": "src/62droptable.js",
    "chars": 2626,
    "preview": "/*\n//\n// DROP TABLE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.DropTable = function (params"
  },
  {
    "path": "src/63createvertex.js",
    "chars": 8527,
    "preview": "/*\n//\n// CREATE VERTEX for AlaSQL\n// Date: 21.04.2015\n// (c) 2015, Andrey Gershun\n//\n*/\n\nyy.CreateVertex = function (par"
  },
  {
    "path": "src/64altertable.js",
    "chars": 4267,
    "preview": "/*\n//\n// ALTER TABLE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n/* global alasql yy */\n\n// ALTE"
  },
  {
    "path": "src/65createindex.js",
    "chars": 2812,
    "preview": "/*\n//\n// CREATE TABLE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.CreateIndex = function (pa"
  },
  {
    "path": "src/66dropindex.js",
    "chars": 386,
    "preview": "/*\n//\n// DROP TABLE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.DropIndex = function (params"
  },
  {
    "path": "src/67withselect.js",
    "chars": 6016,
    "preview": "/*\n//\n// WITH SELECT for Alasql.js\n// Date: 11.01.2015\n// (c) 2015, Andrey Gershun\n//\n*/\n\nyy.WithSelect = function (para"
  },
  {
    "path": "src/68if.js",
    "chars": 1135,
    "preview": "/*\n//\n// IF for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.If = function (params) {\n\treturn Obj"
  },
  {
    "path": "src/69while.js",
    "chars": 2968,
    "preview": "/*\n//\n// WHILE, BREAK, CONTINUE, and BEGIN...END for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n//"
  },
  {
    "path": "src/70insert.js",
    "chars": 14203,
    "preview": "/*\n//\n// INSERT for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global yy alasql*/\nyy.Insert = f"
  },
  {
    "path": "src/71trigger.js",
    "chars": 3529,
    "preview": "/*\n//\n// TRIGGER for Alasql.js\n// Date: 29.12.2015\n//\n*/\n\nyy.CreateTrigger = function (params) {\n\treturn Object.assign(t"
  },
  {
    "path": "src/72delete.js",
    "chars": 5817,
    "preview": "/*\n//\n// DELETE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Delete = function (params) {\n\tre"
  },
  {
    "path": "src/74update.js",
    "chars": 4693,
    "preview": "/*\n//\n// UPDATE for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global yy alasql */\n\nyy.Update ="
  },
  {
    "path": "src/75merge.js",
    "chars": 1200,
    "preview": "/*\n//\n// SET for Alasql.js\n// Date: 01.12.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global alasql, yy */\n\nyy.Merge = fu"
  },
  {
    "path": "src/76usedatabase.js",
    "chars": 5617,
    "preview": "/*\n//\n// UPDATE for Alasql.js\n// Date: 03.11.2014\n// Modified: 16.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global y"
  },
  {
    "path": "src/77declare.js",
    "chars": 1840,
    "preview": "/*\n//\n// SET for Alasql.js\n// Date: 01.12.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Declare = function (params) {\n\tretu"
  },
  {
    "path": "src/78show.js",
    "chars": 3999,
    "preview": "/*\n//\n// SHOW for Alasql.js\n// Date: 19.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.ShowDatabases = function (params) "
  },
  {
    "path": "src/79set.js",
    "chars": 2148,
    "preview": "/*\n//\n// SET for Alasql.js\n// Date: 01.12.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.SetVariable = function (params) {\n\t"
  },
  {
    "path": "src/80console.js",
    "chars": 7180,
    "preview": "alasql.test = function (name, times, fn) {\n\tif (arguments.length === 0) {\n\t\talasql.log(alasql.con.results);\n\t\treturn;\n\t}"
  },
  {
    "path": "src/81commit.js",
    "chars": 1511,
    "preview": "/*\n//\n// Commit for Alasql.js\n// Date: 01.12.2014\n// (c) 2014, Andrey Gershun\n//\n*/\nyy.BeginTransaction = function (para"
  },
  {
    "path": "src/821tsql.js",
    "chars": 916,
    "preview": "if (alasql.options.tsql) {\n\t//\n\t// Check tables and views\n\t// IF OBJECT_ID('dbo.Employees') IS NOT NULL\n\t//   DROP TABLE"
  },
  {
    "path": "src/822mysql.js",
    "chars": 850,
    "preview": "if (alasql.options.mysql) {\n\talasql.fn.TIMESTAMPDIFF = function (unit, date1, date2) {\n\t\treturn alasql.stdfn.DATEDIFF(un"
  },
  {
    "path": "src/823postgres.js",
    "chars": 33,
    "preview": "if (alasql.options.postgres) {\n}\n"
  },
  {
    "path": "src/824oracle.js",
    "chars": 31,
    "preview": "if (alasql.options.oracle) {\n}\n"
  },
  {
    "path": "src/825sqlite.js",
    "chars": 31,
    "preview": "if (alasql.options.sqlite) {\n}\n"
  },
  {
    "path": "src/826orientdb.js",
    "chars": 33,
    "preview": "if (alasql.options.orientdb) {\n}\n"
  },
  {
    "path": "src/830into.js",
    "chars": 6739,
    "preview": "//\n// into functions\n//\n// (c) 2014 Andrey Gershun\n//\n\nalasql.into.SQL = function (filename, opts, data, columns, cb) {\n"
  },
  {
    "path": "src/831xls.js",
    "chars": 8196,
    "preview": "//\n// 831xl.js - Coloring Excel\n// 18.04.2015\n// Generate XLS file with colors and styles\n// with Excel\n\nalasql.into.XLS"
  },
  {
    "path": "src/832xlsxml.js",
    "chars": 10223,
    "preview": "alasql.into.XLSXML = function (filename, opts, data, columns, cb) {\n\topts = opts || {};\n\n\t// If filename is not defined "
  },
  {
    "path": "src/833xlsx.js",
    "chars": 5026,
    "preview": "/**\n\tExport to XLSX function\n\t@function\n\t@param {string|object} filename Filename or options\n\t@param {object|undefined} "
  },
  {
    "path": "src/839zip.js",
    "chars": 9958,
    "preview": "alasql.ZipWriter = function () {\n\t/**\n\t\t@type {object} Entries for ZIP file\n\t*/\n\tvar entries = [];\n\n\t/** \n\t\tCalculate CR"
  },
  {
    "path": "src/843xml.js",
    "chars": 2430,
    "preview": "alasql.from.XML = function (filename, opts, cb, idx, query) {\n\tvar res;\n\t//console.log('cb',cb);\n\t//console.log('JSON');"
  },
  {
    "path": "src/844gexf.js",
    "chars": 223,
    "preview": "alasql.from.GEXF = function (filename, opts, cb, idx, query) {\n\tvar res;\n\talasql('SEARCH FROM XML(' + filename + ')', []"
  },
  {
    "path": "src/84from.js",
    "chars": 14739,
    "preview": "/*\n//\n// FROM functions Alasql.js\n// Date: 11.12.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/**\n Meteor\n */\n\n/* global alas"
  },
  {
    "path": "src/85help.js",
    "chars": 2168,
    "preview": "// NOT included when building\n\n/*\n//\n// HELP for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Hel"
  },
  {
    "path": "src/86print.js",
    "chars": 1517,
    "preview": "/*\n//\n// HELP for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* globals: alasql, yy */\n\n/**\n\tPrint"
  },
  {
    "path": "src/87source.js",
    "chars": 546,
    "preview": "/*\n//\n// HELP for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Source = function (params) {\n\tretu"
  },
  {
    "path": "src/88require.js",
    "chars": 1592,
    "preview": "/*\n//\n// HELP for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\n/* global alasql, yy */\n\nyy.Require ="
  },
  {
    "path": "src/89assert.js",
    "chars": 569,
    "preview": "/*\n//\n// HELP for Alasql.js\n// Date: 03.11.2014\n// (c) 2014, Andrey Gershun\n//\n*/\n\nyy.Assert = function (params) {\n\tretu"
  },
  {
    "path": "src/91indexeddb.js",
    "chars": 11307,
    "preview": "//\n// 91indexeddb.js\n// AlaSQL IndexedDB module\n// Date: 18.04.2015\n// (c) Andrey Gershun\n//\n\n/* global alasql, yy, util"
  },
  {
    "path": "src/92localstorage.js",
    "chars": 11679,
    "preview": "//\n// 91localstorage.js\n// localStorage and DOM-Storage engine\n// Date: 09.12.2014\n// (c) Andrey Gershun\n//\n\n/* global a"
  },
  {
    "path": "src/93sqljs.js",
    "chars": 2888,
    "preview": "//\n// 93sqlite.js\n// SQLite database support\n// (c) 2014, Andrey Gershun\n//\n\nvar SQLITE = (alasql.engines.SQLITE = funct"
  },
  {
    "path": "src/94filestorage.js",
    "chars": 6510,
    "preview": "//\n// 91localstorage.js\n// localStorage and DOM-Storage engine\n// Date: 09.12.2014\n// (c) Andrey Gershun\n//\n\nvar FS = (a"
  },
  {
    "path": "src/97saveas.js",
    "chars": 44,
    "preview": "if(utils.isBrowser && !utils.isWebWorker) {\n"
  },
  {
    "path": "src/98finish.js",
    "chars": 559,
    "preview": "/* eslint-disable */ \r\n\r\n/*\r\n//\r\n// Last part of Alasql.js\r\n// Date: 03.11.2014\r\n// (c) 2014, Andrey Gershun\r\n//\r\n*/\r\n\r\n"
  },
  {
    "path": "src/99worker-finish.js",
    "chars": 140,
    "preview": "\n/* WebWorker */\n/** @type {number} */\nalasql.lastid = 0;\n\n/** @type {object} */\nalasql.buffer = {};\n\nalasql.worker();\n\n"
  },
  {
    "path": "src/99worker-start.js",
    "chars": 2761,
    "preview": "/*\n//\n// AlaSQL Workker\n// Date: 13.04.2014\n// (c) 2014-2015, Andrey Gershun\n//\n*/\n(function (root, factory) {\n    if (t"
  },
  {
    "path": "src/99worker.js",
    "chars": 2007,
    "preview": "alasql = alasql || false;\n\nif (!alasql) {\n\tthrow new Error('alasql was not found');\n}\n\nalasql.worker = function () {\n\tth"
  },
  {
    "path": "src/FileSaver.js",
    "chars": 6184,
    "preview": "/* FileSaver.js\n * A saveAs() FileSaver implementation.\n * 1.3.2\n * 2016-06-16 18:25:19\n *\n * By Eli Grey, http://eligre"
  },
  {
    "path": "src/alasqlparser.jison",
    "chars": 90883,
    "preview": "/*\n//\n// alasqlparser.jison\n// SQL Parser for AlaSQL\n// (c) 2014-2015, Andrey Gershun\n//\n//\n*/\n\n%lex\n%options case-insen"
  },
  {
    "path": "src/alasqlparser.js",
    "chars": 360364,
    "preview": "/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n"
  },
  {
    "path": "src/console/README.md",
    "chars": 36,
    "preview": "# Console functions\n\n* ECHO\n* PRINT "
  },
  {
    "path": "src/db2/README.md",
    "chars": 24,
    "preview": "# DB2 syntax + connector"
  },
  {
    "path": "src/debug/README.md",
    "chars": 29,
    "preview": "# Debugging functions\n\nASSERT"
  },
  {
    "path": "src/echo/README.md",
    "chars": 156,
    "preview": "# Echo Plugin\n\nThis is a simple test plugin to support only one command:\n```js\n    alasql('REQUIRE ECHO');\n    var res ="
  },
  {
    "path": "src/echo/alasql-echo.js",
    "chars": 477,
    "preview": "// Plugin sample\n\nvar yy = alasql.yy;\n\nyy.Echo = function (params) {\n\treturn Object.assign(this, params);\n};\nyy.Echo.pro"
  },
  {
    "path": "src/filestorage/README.md",
    "chars": 33,
    "preview": "# Native AlaSQL database backend\n"
  },
  {
    "path": "src/filesystem/README.md",
    "chars": 26,
    "preview": "# HTML5 FileSystem backend"
  },
  {
    "path": "src/graph/README.md",
    "chars": 116,
    "preview": "# AlaSQL Graph functions\n\n* CREATE GRAPH\n* Graph SEARCH functions (searchers and selectors)\n* Path finding function\n"
  },
  {
    "path": "src/help/README.md",
    "chars": 45,
    "preview": "# AlaSQL internal help system\n\n* HELP keyword"
  },
  {
    "path": "src/html/README.md",
    "chars": 42,
    "preview": "# HTML import-export + connector functions"
  },
  {
    "path": "src/indexeddb/README.md",
    "chars": 26,
    "preview": "# AlaSQL IndexedDB backend"
  },
  {
    "path": "src/linq/README.md",
    "chars": 26,
    "preview": "# ALaSQL Fulent interface\n"
  },
  {
    "path": "src/localstorage/README.md",
    "chars": 50,
    "preview": "# LocalStorage and SessionStorage database backend"
  },
  {
    "path": "src/lovefield/README.md",
    "chars": 32,
    "preview": "# AlaSQL Lovefield SQL interface"
  },
  {
    "path": "src/md/README.md",
    "chars": 164,
    "preview": "# MD (Markdonw) plug-in\r\n\r\nThis is an example of simple AlaSQL plugin.\r\n\r\n```sql\r\n    REQUIRE MD;\r\n    SELECT * INTO MD"
  },
  {
    "path": "src/mongodb/README.md",
    "chars": 26,
    "preview": "# MongoDB AlaSQL interface"
  },
  {
    "path": "src/mysql/README.md",
    "chars": 35,
    "preview": "# MySQL syntax and pass-thru driver"
  },
  {
    "path": "src/neo4j/README.md",
    "chars": 36,
    "preview": "# Neo4j syntax + pass-thru connector"
  },
  {
    "path": "src/oracle/README.md",
    "chars": 38,
    "preview": "# Oracle syntax + pass-thru connector\n"
  },
  {
    "path": "src/orientdb/README.md",
    "chars": 101,
    "preview": "# AlaSQL OrientDB plugin\n\nSupported commands:\n```\nOSELECT \nCREATE CLASS\nCREATE VERTEX\nCREATE EDGE\n```"
  },
  {
    "path": "src/orientdb/alasql-orientdb.js",
    "chars": 94,
    "preview": "//\n// AlaSQL OrientDB compatibility plugin\n// (c) 2015, Andrey Gershun\n//\nvar yy = alasql.yy;\n"
  },
  {
    "path": "src/orientdb/orientdbparser.jison",
    "chars": 1908,
    "preview": "/*\n\nCREATE CLASS Literal\n\n* name\n* type\n* linked class\n* mandatory\n* readonly\n* notnull\n* min\n* max\n\n* cluster\n\nCLASSES\n"
  },
  {
    "path": "src/postgres/README.md",
    "chars": 29,
    "preview": "# Postgres syntax + connector"
  },
  {
    "path": "src/pouchdb/README.md",
    "chars": 23,
    "preview": "Support PouchDB backend"
  },
  {
    "path": "src/precompile/README.md",
    "chars": 3110,
    "preview": "# AlaSQL Precompile Module\n\nThe precompile module provides the `compileToJS` function to compile SQL queries into JavaSc"
  },
  {
    "path": "src/precompile/index.js",
    "chars": 3038,
    "preview": "/**\n\tAlaSQL Precompile Module\n\tProvides compileToJS function for generating pre-compiled SQL queries\n*/\n\n// Import alasq"
  },
  {
    "path": "src/pretty/README.md",
    "chars": 42,
    "preview": "# Prettyfier functions\n\nalasql.pretty(sql)"
  },
  {
    "path": "src/prolog/README.md",
    "chars": 24,
    "preview": "# Prolog queries\n\n:-\n?-\n"
  },
  {
    "path": "src/prolog/alasql-prolog.js",
    "chars": 1060,
    "preview": "// Prolog plugin\n\nvar yy = alasql.yy;\n\nyy.Term = function (params) {\n\treturn Object.assign(this, params);\n};\nyy.Term.pro"
  },
  {
    "path": "src/prolog/prolog.coffee",
    "chars": 18031,
    "preview": "################################################\r\n# MINDAY 0.008BI \r\n# prolog.coffee\r\n# Часть программы, связанная с яз"
  },
  {
    "path": "src/sprintf/README.md",
    "chars": 47,
    "preview": "# Sprintf and other string formatting functions"
  },
  {
    "path": "src/sqlite/README.md",
    "chars": 37,
    "preview": "# SQLite syntax + pass-thru connector"
  },
  {
    "path": "src/sqljs/README.md",
    "chars": 19,
    "preview": "# SQL.js connector\n"
  },
  {
    "path": "src/tabletop/README.md",
    "chars": 53,
    "preview": "# Google Spreadsheet connector (with Tableto library)"
  },
  {
    "path": "src/tsql/README.md",
    "chars": 37,
    "preview": "# T-SQL syntax + SQL Server connector"
  },
  {
    "path": "src/websql/README.md",
    "chars": 18,
    "preview": "# WebSQL connector"
  },
  {
    "path": "src/websql/sqliteparser.jison",
    "chars": 29422,
    "preview": "/*\n * SQLite Jison parser grammar rules\n * for SQLidx WebSQL shim over IndexedDB\n * \n * \n * The MIT License (MIT)\n *\n * "
  },
  {
    "path": "src/xls/README.md",
    "chars": 32,
    "preview": "# Excel import-export operations"
  },
  {
    "path": "src/xml/README.md",
    "chars": 34,
    "preview": "# XML parsing and search functions"
  },
  {
    "path": "test/!testlog/Chakra.md",
    "chars": 25470,
    "preview": "### Chakra v6.0.0-pre5\n\n```\n  Running tests on alasql@0.2.3-develop-1216\n\n  Environment detected: {\n    \"alasqlPath\": \"C"
  },
  {
    "path": "test/!testlog/Chrome.md",
    "chars": 37177,
    "preview": "### Chrome 48\n- `alasql@0.2.3-develop-1206`\n- Failures: 61\n- Passes 1063\n\n\n```\nduration: 11.78s\nTest 127 SOURCE\n1. Load "
  },
  {
    "path": "test/!testlog/Edge.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/!testlog/Firefox.md",
    "chars": 66356,
    "preview": "\n### Firefox 42\n\n    - `alasql@0.2.3-develop-1206`\n    - Failures: 80\n    - Passes 1044\n\n\n\n```\n\n    duration: 23.29s\n\n  "
  },
  {
    "path": "test/!testlog/IE.md",
    "chars": 0,
    "preview": ""
  }
]

// ... and 699 more files (download for full content)

About this extraction

This page contains the full source code of the AlaSQL/alasql GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 899 files (12.6 MB), approximately 3.3M tokens, and a symbol index with 1911 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!