{"version":3,"sources":["../src/index.ts","../src/allDialects.ts","../src/expandPhrases.ts","../src/lexer/token.ts","../src/languages/bigquery/bigquery.functions.ts","../src/languages/bigquery/bigquery.keywords.ts","../src/languages/bigquery/bigquery.formatter.ts","../src/languages/db2/db2.functions.ts","../src/languages/db2/db2.keywords.ts","../src/languages/db2/db2.formatter.ts","../src/languages/db2i/db2i.functions.ts","../src/languages/db2i/db2i.keywords.ts","../src/languages/db2i/db2i.formatter.ts","../src/languages/hive/hive.functions.ts","../src/languages/hive/hive.keywords.ts","../src/languages/hive/hive.formatter.ts","../src/languages/mariadb/likeMariaDb.ts","../src/languages/mariadb/mariadb.keywords.ts","../src/languages/mariadb/mariadb.functions.ts","../src/languages/mariadb/mariadb.formatter.ts","../src/languages/mysql/mysql.keywords.ts","../src/languages/mysql/mysql.functions.ts","../src/languages/mysql/mysql.formatter.ts","../src/languages/tidb/tidb.keywords.ts","../src/languages/tidb/tidb.functions.ts","../src/languages/tidb/tidb.formatter.ts","../src/languages/n1ql/n1ql.functions.ts","../src/languages/n1ql/n1ql.keywords.ts","../src/languages/n1ql/n1ql.formatter.ts","../src/languages/plsql/plsql.keywords.ts","../src/languages/plsql/plsql.functions.ts","../src/languages/plsql/plsql.formatter.ts","../src/languages/postgresql/postgresql.functions.ts","../src/languages/postgresql/postgresql.keywords.ts","../src/languages/postgresql/postgresql.formatter.ts","../src/languages/redshift/redshift.functions.ts","../src/languages/redshift/redshift.keywords.ts","../src/languages/redshift/redshift.formatter.ts","../src/languages/spark/spark.keywords.ts","../src/languages/spark/spark.functions.ts","../src/languages/spark/spark.formatter.ts","../src/languages/sqlite/sqlite.functions.ts","../src/languages/sqlite/sqlite.keywords.ts","../src/languages/sqlite/sqlite.formatter.ts","../src/languages/sql/sql.functions.ts","../src/languages/sql/sql.keywords.ts","../src/languages/sql/sql.formatter.ts","../src/languages/trino/trino.functions.ts","../src/languages/trino/trino.keywords.ts","../src/languages/trino/trino.formatter.ts","../src/languages/transactsql/transactsql.functions.ts","../src/languages/transactsql/transactsql.keywords.ts","../src/languages/transactsql/transactsql.formatter.ts","../src/languages/singlestoredb/singlestoredb.keywords.ts","../src/languages/singlestoredb/singlestoredb.functions.ts","../src/languages/singlestoredb/singlestoredb.formatter.ts","../src/languages/snowflake/snowflake.functions.ts","../src/languages/snowflake/snowflake.keywords.ts","../src/languages/snowflake/snowflake.formatter.ts","../src/utils.ts","../src/lexer/regexUtil.ts","../src/lexer/regexFactory.ts","../src/lexer/lineColFromIndex.ts","../src/lexer/TokenizerEngine.ts","../src/lexer/NestedComment.ts","../src/lexer/Tokenizer.ts","../src/dialect.ts","../src/formatter/config.ts","../src/formatter/Params.ts","../src/parser/createParser.ts","../src/lexer/disambiguateTokens.ts","../src/parser/LexerAdapter.ts","../src/parser/grammar.ts","../src/formatter/Layout.ts","../src/formatter/tabularStyle.ts","../src/formatter/Indentation.ts","../src/formatter/InlineLayout.ts","../src/formatter/ExpressionFormatter.ts","../src/formatter/Formatter.ts","../src/validateConfig.ts","../src/sqlFormatter.ts"],"sourcesContent":["export { supportedDialects, format, formatDialect } from './sqlFormatter.js';\nexport { expandPhrases } from './expandPhrases.js';\nexport { ConfigError } from './validateConfig.js';\n\n// When adding a new dialect, be sure to add it to the list of exports below.\nexport { bigquery } from './languages/bigquery/bigquery.formatter.js';\nexport { db2 } from './languages/db2/db2.formatter.js';\nexport { db2i } from './languages/db2i/db2i.formatter.js';\nexport { hive } from './languages/hive/hive.formatter.js';\nexport { mariadb } from './languages/mariadb/mariadb.formatter.js';\nexport { mysql } from './languages/mysql/mysql.formatter.js';\nexport { tidb } from './languages/tidb/tidb.formatter.js';\nexport { n1ql } from './languages/n1ql/n1ql.formatter.js';\nexport { plsql } from './languages/plsql/plsql.formatter.js';\nexport { postgresql } from './languages/postgresql/postgresql.formatter.js';\nexport { redshift } from './languages/redshift/redshift.formatter.js';\nexport { spark } from './languages/spark/spark.formatter.js';\nexport { sqlite } from './languages/sqlite/sqlite.formatter.js';\nexport { sql } from './languages/sql/sql.formatter.js';\nexport { trino } from './languages/trino/trino.formatter.js';\nexport { transactsql } from './languages/transactsql/transactsql.formatter.js';\nexport { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';\nexport { snowflake } from './languages/snowflake/snowflake.formatter.js';\n\n// NB! To re-export types the \"export type\" syntax is required by webpack.\n// Otherwise webpack build will fail.\nexport type {\n SqlLanguage,\n FormatOptionsWithLanguage,\n FormatOptionsWithDialect,\n} from './sqlFormatter.js';\nexport type {\n IndentStyle,\n KeywordCase,\n DataTypeCase,\n FunctionCase,\n IdentifierCase,\n LogicalOperatorNewline,\n FormatOptions,\n} from './FormatOptions.js';\nexport type { ParamItems } from './formatter/Params.js';\nexport type { ParamTypes } from './lexer/TokenizerOptions.js';\nexport type { DialectOptions } from './dialect.js';\n","export { bigquery } from './languages/bigquery/bigquery.formatter.js';\nexport { db2 } from './languages/db2/db2.formatter.js';\nexport { db2i } from './languages/db2i/db2i.formatter.js';\nexport { hive } from './languages/hive/hive.formatter.js';\nexport { mariadb } from './languages/mariadb/mariadb.formatter.js';\nexport { mysql } from './languages/mysql/mysql.formatter.js';\nexport { tidb } from './languages/tidb/tidb.formatter.js';\nexport { n1ql } from './languages/n1ql/n1ql.formatter.js';\nexport { plsql } from './languages/plsql/plsql.formatter.js';\nexport { postgresql } from './languages/postgresql/postgresql.formatter.js';\nexport { redshift } from './languages/redshift/redshift.formatter.js';\nexport { spark } from './languages/spark/spark.formatter.js';\nexport { sqlite } from './languages/sqlite/sqlite.formatter.js';\nexport { sql } from './languages/sql/sql.formatter.js';\nexport { trino } from './languages/trino/trino.formatter.js';\nexport { transactsql } from './languages/transactsql/transactsql.formatter.js';\nexport { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';\nexport { snowflake } from './languages/snowflake/snowflake.formatter.js';\n","/**\n * Performs expandSinglePhrase() on array\n */\nexport const expandPhrases = (phrases: string[]): string[] => phrases.flatMap(expandSinglePhrase);\n\n/**\n * Expands a syntax description like\n *\n * \"CREATE [OR REPLACE] [TEMP|TEMPORARY] TABLE\"\n *\n * into an array of all possible combinations like:\n *\n * [ \"CREATE TABLE\",\n * \"CREATE TEMP TABLE\",\n * \"CREATE TEMPORARY TABLE\",\n * \"CREATE OR REPLACE TABLE\",\n * \"CREATE OR REPLACE TEMP TABLE\",\n * \"CREATE OR REPLACE TEMPORARY TABLE\" ]\n *\n * The [] and {} parenthesis can also be nested like\n *\n * \"FOR [OF {UNIQUE | MANDATORY} TABLES]\"\n *\n * resulting in:\n *\n * [ \"FOR\",\n * \"FOR OF UNIQUE TABLES\",\n * \"FOR OF MANDATORY TABLES\" ]\n */\nexport const expandSinglePhrase = (phrase: string): string[] =>\n buildCombinations(parsePhrase(phrase)).map(stripExtraWhitespace);\n\nconst stripExtraWhitespace = (text: string) => text.replace(/ +/g, ' ').trim();\n\nconst parsePhrase = (text: string): Phrase => ({\n type: 'mandatory_block',\n items: parseAlteration(text, 0)[0],\n});\n\ntype Phrase = string | MandatoryBlock | OptionalBlock | Concatenation;\ntype Concatenation = { type: 'concatenation'; items: Phrase[] };\ntype MandatoryBlock = { type: 'mandatory_block'; items: Phrase[] };\ntype OptionalBlock = { type: 'optional_block'; items: Phrase[] };\n\nconst parseAlteration = (\n text: string,\n index: number,\n expectClosing?: ']' | '}'\n): [Phrase[], number] => {\n const alterations: Phrase[] = [];\n while (text[index]) {\n const [term, newIndex] = parseConcatenation(text, index);\n alterations.push(term);\n index = newIndex;\n if (text[index] === '|') {\n index++;\n } else if (text[index] === '}' || text[index] === ']') {\n if (expectClosing !== text[index]) {\n throw new Error(`Unbalanced parenthesis in: ${text}`);\n }\n index++;\n return [alterations, index];\n } else if (index === text.length) {\n if (expectClosing) {\n throw new Error(`Unbalanced parenthesis in: ${text}`);\n }\n return [alterations, index];\n } else {\n throw new Error(`Unexpected \"${text[index]}\"`);\n }\n }\n return [alterations, index];\n};\n\nconst parseConcatenation = (text: string, index: number): [Phrase, number] => {\n const items: Phrase[] = [];\n while (true) {\n const [term, newIndex] = parseTerm(text, index);\n if (term) {\n items.push(term);\n index = newIndex;\n } else {\n break;\n }\n }\n return items.length === 1 ? [items[0], index] : [{ type: 'concatenation', items }, index];\n};\n\nconst parseTerm = (text: string, index: number): [Phrase, number] => {\n if (text[index] === '{') {\n return parseMandatoryBlock(text, index + 1);\n } else if (text[index] === '[') {\n return parseOptionalBlock(text, index + 1);\n } else {\n let word = '';\n while (text[index] && /[A-Za-z0-9_ ]/.test(text[index])) {\n word += text[index];\n index++;\n }\n return [word, index];\n }\n};\n\nconst parseMandatoryBlock = (text: string, index: number): [MandatoryBlock, number] => {\n const [items, newIndex] = parseAlteration(text, index, '}');\n return [{ type: 'mandatory_block', items }, newIndex];\n};\n\nconst parseOptionalBlock = (text: string, index: number): [OptionalBlock, number] => {\n const [items, newIndex] = parseAlteration(text, index, ']');\n return [{ type: 'optional_block', items }, newIndex];\n};\n\nconst buildCombinations = (node: Phrase): string[] => {\n if (typeof node === 'string') {\n return [node];\n } else if (node.type === 'concatenation') {\n return node.items.map(buildCombinations).reduce(stringCombinations, ['']);\n } else if (node.type === 'mandatory_block') {\n return node.items.flatMap(buildCombinations);\n } else if (node.type === 'optional_block') {\n return ['', ...node.items.flatMap(buildCombinations)];\n } else {\n throw new Error(`Unknown node type: ${node}`);\n }\n};\n\nconst stringCombinations = (xs: string[], ys: string[]): string[] => {\n const results: string[] = [];\n for (const x of xs) {\n for (const y of ys) {\n results.push(x + y);\n }\n }\n return results;\n};\n","/** Token type enum for all possible Token categories */\nexport enum TokenType {\n QUOTED_IDENTIFIER = 'QUOTED_IDENTIFIER',\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n VARIABLE = 'VARIABLE',\n RESERVED_DATA_TYPE = 'RESERVED_DATA_TYPE',\n RESERVED_PARAMETERIZED_DATA_TYPE = 'RESERVED_PARAMETERIZED_DATA_TYPE',\n RESERVED_KEYWORD = 'RESERVED_KEYWORD',\n RESERVED_FUNCTION_NAME = 'RESERVED_FUNCTION_NAME',\n RESERVED_PHRASE = 'RESERVED_PHRASE',\n RESERVED_SET_OPERATION = 'RESERVED_SET_OPERATION',\n RESERVED_CLAUSE = 'RESERVED_CLAUSE',\n RESERVED_SELECT = 'RESERVED_SELECT',\n RESERVED_JOIN = 'RESERVED_JOIN',\n ARRAY_IDENTIFIER = 'ARRAY_IDENTIFIER', // IDENTIFIER token in front of [\n ARRAY_KEYWORD = 'ARRAY_KEYWORD', // RESERVED_DATA_TYPE token in front of [\n CASE = 'CASE',\n END = 'END',\n WHEN = 'WHEN',\n ELSE = 'ELSE',\n THEN = 'THEN',\n LIMIT = 'LIMIT',\n BETWEEN = 'BETWEEN',\n AND = 'AND',\n OR = 'OR',\n XOR = 'XOR',\n OPERATOR = 'OPERATOR',\n COMMA = 'COMMA',\n ASTERISK = 'ASTERISK', // *\n PROPERTY_ACCESS_OPERATOR = 'PROPERTY_ACCESS_OPERATOR', // Usually \".\"\n OPEN_PAREN = 'OPEN_PAREN',\n CLOSE_PAREN = 'CLOSE_PAREN',\n LINE_COMMENT = 'LINE_COMMENT',\n BLOCK_COMMENT = 'BLOCK_COMMENT',\n // Text between /* sql-formatter-disable */ and /* sql-formatter-enable */\n DISABLE_COMMENT = 'DISABLE_COMMENT',\n NUMBER = 'NUMBER',\n NAMED_PARAMETER = 'NAMED_PARAMETER',\n QUOTED_PARAMETER = 'QUOTED_PARAMETER',\n NUMBERED_PARAMETER = 'NUMBERED_PARAMETER',\n POSITIONAL_PARAMETER = 'POSITIONAL_PARAMETER',\n CUSTOM_PARAMETER = 'CUSTOM_PARAMETER',\n DELIMITER = 'DELIMITER',\n EOF = 'EOF',\n}\n\n/** Struct to store the most basic cohesive unit of language grammar */\nexport interface Token {\n type: TokenType;\n raw: string; // The raw original text that was matched\n text: string; // Cleaned up text e.g. keyword converted to uppercase and extra spaces removed\n key?: string;\n start: number;\n precedingWhitespace?: string; // Whitespace before this token, if any\n}\n\n/** Creates EOF token positioned at given location */\nexport const createEofToken = (index: number) => ({\n type: TokenType.EOF,\n raw: '«EOF»',\n text: '«EOF»',\n start: index,\n});\n\n/**\n * For use as a \"missing token\"\n * e.g. in lookAhead and lookBehind to avoid dealing with null values\n */\nexport const EOF_TOKEN = createEofToken(Infinity);\n\n/** Checks if two tokens are equivalent */\nexport const testToken =\n (compareToken: { type: TokenType; text: string }) =>\n (token: Token): boolean =>\n token.type === compareToken.type && token.text === compareToken.text;\n\n/** Util object that allows for easy checking of Reserved Keywords */\nexport const isToken = {\n ARRAY: testToken({ text: 'ARRAY', type: TokenType.RESERVED_DATA_TYPE }),\n BY: testToken({ text: 'BY', type: TokenType.RESERVED_KEYWORD }),\n SET: testToken({ text: 'SET', type: TokenType.RESERVED_CLAUSE }),\n STRUCT: testToken({ text: 'STRUCT', type: TokenType.RESERVED_DATA_TYPE }),\n WINDOW: testToken({ text: 'WINDOW', type: TokenType.RESERVED_CLAUSE }),\n VALUES: testToken({ text: 'VALUES', type: TokenType.RESERVED_CLAUSE }),\n};\n\n/** Checks if token is any Reserved Keyword or Clause */\nexport const isReserved = (type: TokenType): boolean =>\n type === TokenType.RESERVED_DATA_TYPE ||\n type === TokenType.RESERVED_KEYWORD ||\n type === TokenType.RESERVED_FUNCTION_NAME ||\n type === TokenType.RESERVED_PHRASE ||\n type === TokenType.RESERVED_CLAUSE ||\n type === TokenType.RESERVED_SELECT ||\n type === TokenType.RESERVED_SET_OPERATION ||\n type === TokenType.RESERVED_JOIN ||\n type === TokenType.ARRAY_KEYWORD ||\n type === TokenType.CASE ||\n type === TokenType.END ||\n type === TokenType.WHEN ||\n type === TokenType.ELSE ||\n type === TokenType.THEN ||\n type === TokenType.LIMIT ||\n type === TokenType.BETWEEN ||\n type === TokenType.AND ||\n type === TokenType.OR ||\n type === TokenType.XOR;\n\nexport const isLogicalOperator = (type: TokenType): boolean =>\n type === TokenType.AND || type === TokenType.OR || type === TokenType.XOR;\n","export const functions: string[] = [\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions\n 'KEYS.NEW_KEYSET',\n 'KEYS.ADD_KEY_FROM_RAW_BYTES',\n 'AEAD.DECRYPT_BYTES',\n 'AEAD.DECRYPT_STRING',\n 'AEAD.ENCRYPT',\n 'KEYS.KEYSET_CHAIN',\n 'KEYS.KEYSET_FROM_JSON',\n 'KEYS.KEYSET_TO_JSON',\n 'KEYS.ROTATE_KEYSET',\n 'KEYS.KEYSET_LENGTH',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions\n 'ANY_VALUE',\n 'ARRAY_AGG',\n 'AVG',\n 'CORR',\n 'COUNT',\n 'COUNTIF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'MAX',\n 'MIN',\n 'ST_CLUSTERDBSCAN',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRING_AGG',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions\n 'ANY_VALUE',\n 'ARRAY_AGG',\n 'ARRAY_CONCAT_AGG',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'COUNT',\n 'COUNTIF',\n 'LOGICAL_AND',\n 'LOGICAL_OR',\n 'MAX',\n 'MIN',\n 'STRING_AGG',\n 'SUM',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_QUANTILES',\n 'APPROX_TOP_COUNT',\n 'APPROX_TOP_SUM',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions\n // 'ARRAY',\n 'ARRAY_CONCAT',\n 'ARRAY_LENGTH',\n 'ARRAY_TO_STRING',\n 'GENERATE_ARRAY',\n 'GENERATE_DATE_ARRAY',\n 'GENERATE_TIMESTAMP_ARRAY',\n 'ARRAY_REVERSE',\n 'OFFSET',\n 'SAFE_OFFSET',\n 'ORDINAL',\n 'SAFE_ORDINAL',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions\n 'BIT_COUNT',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions\n // 'CASE',\n 'PARSE_BIGNUMERIC',\n 'PARSE_NUMERIC',\n 'SAFE_CAST',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions\n 'CURRENT_DATE',\n 'EXTRACT',\n 'DATE',\n 'DATE_ADD',\n 'DATE_SUB',\n 'DATE_DIFF',\n 'DATE_TRUNC',\n 'DATE_FROM_UNIX_DATE',\n 'FORMAT_DATE',\n 'LAST_DAY',\n 'PARSE_DATE',\n 'UNIX_DATE',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions\n 'CURRENT_DATETIME',\n 'DATETIME',\n 'EXTRACT',\n 'DATETIME_ADD',\n 'DATETIME_SUB',\n 'DATETIME_DIFF',\n 'DATETIME_TRUNC',\n 'FORMAT_DATETIME',\n 'LAST_DAY',\n 'PARSE_DATETIME',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions\n 'ERROR',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions\n 'EXTERNAL_QUERY',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions\n 'S2_CELLIDFROMPOINT',\n 'S2_COVERINGCELLIDS',\n 'ST_ANGLE',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASGEOJSON',\n 'ST_ASTEXT',\n 'ST_AZIMUTH',\n 'ST_BOUNDARY',\n 'ST_BOUNDINGBOX',\n 'ST_BUFFER',\n 'ST_BUFFERWITHTOLERANCE',\n 'ST_CENTROID',\n 'ST_CENTROID_AGG',\n 'ST_CLOSESTPOINT',\n 'ST_CLUSTERDBSCAN',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_COVEREDBY',\n 'ST_COVERS',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DUMP',\n 'ST_DWITHIN',\n 'ST_ENDPOINT',\n 'ST_EQUALS',\n 'ST_EXTENT',\n 'ST_EXTERIORRING',\n 'ST_GEOGFROM',\n 'ST_GEOGFROMGEOJSON',\n 'ST_GEOGFROMTEXT',\n 'ST_GEOGFROMWKB',\n 'ST_GEOGPOINT',\n 'ST_GEOGPOINTFROMGEOHASH',\n 'ST_GEOHASH',\n 'ST_GEOMETRYTYPE',\n 'ST_INTERIORRINGS',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_INTERSECTSBOX',\n 'ST_ISCOLLECTION',\n 'ST_ISEMPTY',\n 'ST_LENGTH',\n 'ST_MAKELINE',\n 'ST_MAKEPOLYGON',\n 'ST_MAKEPOLYGONORIENTED',\n 'ST_MAXDISTANCE',\n 'ST_NPOINTS',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMPOINTS',\n 'ST_PERIMETER',\n 'ST_POINTN',\n 'ST_SIMPLIFY',\n 'ST_SNAPTOGRID',\n 'ST_STARTPOINT',\n 'ST_TOUCHES',\n 'ST_UNION',\n 'ST_UNION_AGG',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_Y',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions\n 'FARM_FINGERPRINT',\n 'MD5',\n 'SHA1',\n 'SHA256',\n 'SHA512',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions\n 'HLL_COUNT.INIT',\n 'HLL_COUNT.MERGE',\n 'HLL_COUNT.MERGE_PARTIAL',\n 'HLL_COUNT.EXTRACT',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions\n 'MAKE_INTERVAL',\n 'EXTRACT',\n 'JUSTIFY_DAYS',\n 'JUSTIFY_HOURS',\n 'JUSTIFY_INTERVAL',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions\n 'JSON_EXTRACT',\n 'JSON_QUERY',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_VALUE',\n 'JSON_EXTRACT_ARRAY',\n 'JSON_QUERY_ARRAY',\n 'JSON_EXTRACT_STRING_ARRAY',\n 'JSON_VALUE_ARRAY',\n 'TO_JSON_STRING',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions\n 'ABS',\n 'SIGN',\n 'IS_INF',\n 'IS_NAN',\n 'IEEE_DIVIDE',\n 'RAND',\n 'SQRT',\n 'POW',\n 'POWER',\n 'EXP',\n 'LN',\n 'LOG',\n 'LOG10',\n 'GREATEST',\n 'LEAST',\n 'DIV',\n 'SAFE_DIVIDE',\n 'SAFE_MULTIPLY',\n 'SAFE_NEGATE',\n 'SAFE_ADD',\n 'SAFE_SUBTRACT',\n 'MOD',\n 'ROUND',\n 'TRUNC',\n 'CEIL',\n 'CEILING',\n 'FLOOR',\n 'COS',\n 'COSH',\n 'ACOS',\n 'ACOSH',\n 'SIN',\n 'SINH',\n 'ASIN',\n 'ASINH',\n 'TAN',\n 'TANH',\n 'ATAN',\n 'ATANH',\n 'ATAN2',\n 'RANGE_BUCKET',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'NTH_VALUE',\n 'LEAD',\n 'LAG',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions\n 'NET.IP_FROM_STRING',\n 'NET.SAFE_IP_FROM_STRING',\n 'NET.IP_TO_STRING',\n 'NET.IP_NET_MASK',\n 'NET.IP_TRUNC',\n 'NET.IPV4_FROM_INT64',\n 'NET.IPV4_TO_INT64',\n 'NET.HOST',\n 'NET.PUBLIC_SUFFIX',\n 'NET.REG_DOMAIN',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions\n 'RANK',\n 'DENSE_RANK',\n 'PERCENT_RANK',\n 'CUME_DIST',\n 'NTILE',\n 'ROW_NUMBER',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions\n 'SESSION_USER',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions\n 'CORR',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STDDEV',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions\n 'ASCII',\n 'BYTE_LENGTH',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CODE_POINTS_TO_BYTES',\n 'CODE_POINTS_TO_STRING',\n 'CONCAT',\n 'CONTAINS_SUBSTR',\n 'ENDS_WITH',\n 'FORMAT',\n 'FROM_BASE32',\n 'FROM_BASE64',\n 'FROM_HEX',\n 'INITCAP',\n 'INSTR',\n 'LEFT',\n 'LENGTH',\n 'LPAD',\n 'LOWER',\n 'LTRIM',\n 'NORMALIZE',\n 'NORMALIZE_AND_CASEFOLD',\n 'OCTET_LENGTH',\n 'REGEXP_CONTAINS',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPLACE',\n 'REPEAT',\n 'REVERSE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SAFE_CONVERT_BYTES_TO_STRING',\n 'SOUNDEX',\n 'SPLIT',\n 'STARTS_WITH',\n 'STRPOS',\n 'SUBSTR',\n 'SUBSTRING',\n 'TO_BASE32',\n 'TO_BASE64',\n 'TO_CODE_POINTS',\n 'TO_HEX',\n 'TRANSLATE',\n 'TRIM',\n 'UNICODE',\n 'UPPER',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions\n 'CURRENT_TIME',\n 'TIME',\n 'EXTRACT',\n 'TIME_ADD',\n 'TIME_SUB',\n 'TIME_DIFF',\n 'TIME_TRUNC',\n 'FORMAT_TIME',\n 'PARSE_TIME',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions\n 'CURRENT_TIMESTAMP',\n 'EXTRACT',\n 'STRING',\n 'TIMESTAMP',\n 'TIMESTAMP_ADD',\n 'TIMESTAMP_SUB',\n 'TIMESTAMP_DIFF',\n 'TIMESTAMP_TRUNC',\n 'FORMAT_TIMESTAMP',\n 'PARSE_TIMESTAMP',\n 'TIMESTAMP_SECONDS',\n 'TIMESTAMP_MILLIS',\n 'TIMESTAMP_MICROS',\n 'UNIX_SECONDS',\n 'UNIX_MILLIS',\n 'UNIX_MICROS',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions\n 'GENERATE_UUID',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions\n 'COALESCE',\n 'IF',\n 'IFNULL',\n 'NULLIF',\n\n // https://cloud.google.com/bigquery/docs/reference/legacy-sql\n // legacyAggregate\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'EXACT_COUNT_DISTINCT',\n 'FIRST',\n 'GROUP_CONCAT',\n 'GROUP_CONCAT_UNQUOTED',\n 'LAST',\n 'MAX',\n 'MIN',\n 'NEST',\n 'NTH',\n 'QUANTILES',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'TOP',\n 'UNIQUE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n\n // legacyBitwise\n 'BIT_COUNT',\n\n // legacyCasting\n 'BOOLEAN',\n 'BYTES',\n 'CAST',\n 'FLOAT',\n 'HEX_STRING',\n 'INTEGER',\n 'STRING',\n\n // legacyComparison\n // expr 'IN',\n 'COALESCE',\n 'GREATEST',\n 'IFNULL',\n 'IS_INF',\n 'IS_NAN',\n 'IS_EXPLICITLY_DEFINED',\n 'LEAST',\n 'NVL',\n\n // legacyDatetime\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE',\n 'DATE_ADD',\n 'DATEDIFF',\n 'DAY',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'FORMAT_UTC_USEC',\n 'HOUR',\n 'MINUTE',\n 'MONTH',\n 'MSEC_TO_TIMESTAMP',\n 'NOW',\n 'PARSE_UTC_USEC',\n 'QUARTER',\n 'SEC_TO_TIMESTAMP',\n 'SECOND',\n 'STRFTIME_UTC_USEC',\n 'TIME',\n 'TIMESTAMP',\n 'TIMESTAMP_TO_MSEC',\n 'TIMESTAMP_TO_SEC',\n 'TIMESTAMP_TO_USEC',\n 'USEC_TO_TIMESTAMP',\n 'UTC_USEC_TO_DAY',\n 'UTC_USEC_TO_HOUR',\n 'UTC_USEC_TO_MONTH',\n 'UTC_USEC_TO_WEEK',\n 'UTC_USEC_TO_YEAR',\n 'WEEK',\n 'YEAR',\n\n // legacyIp\n 'FORMAT_IP',\n 'PARSE_IP',\n 'FORMAT_PACKED_IP',\n 'PARSE_PACKED_IP',\n\n // legacyJson\n 'JSON_EXTRACT',\n 'JSON_EXTRACT_SCALAR',\n\n // legacyMath\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATANH',\n 'ATAN2',\n 'CEIL',\n 'COS',\n 'COSH',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'LOG2',\n 'LOG10',\n 'PI',\n 'POW',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n\n // legacyRegex\n 'REGEXP_MATCH',\n 'REGEXP_EXTRACT',\n 'REGEXP_REPLACE',\n\n // legacyString\n 'CONCAT',\n // expr CONTAINS 'str'\n 'INSTR',\n 'LEFT',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'REPLACE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SPLIT',\n 'SUBSTR',\n 'UPPER',\n\n // legacyTableWildcard\n 'TABLE_DATE_RANGE',\n 'TABLE_DATE_RANGE_STRICT',\n 'TABLE_QUERY',\n\n // legacyUrl\n 'HOST',\n 'DOMAIN',\n 'TLD',\n\n // legacyWindow\n 'AVG',\n 'COUNT',\n 'MAX',\n 'MIN',\n 'STDDEV',\n 'SUM',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n\n // legacyMisc\n 'CURRENT_USER',\n 'EVERY',\n 'FROM_BASE64',\n 'HASH',\n 'FARM_FINGERPRINT',\n 'IF',\n 'POSITION',\n 'SHA1',\n 'SOME',\n 'TO_BASE64',\n\n // other\n 'BQ.JOBS.CANCEL',\n 'BQ.REFRESH_MATERIALIZED_VIEW',\n\n // ddl\n 'OPTIONS',\n\n // pivot\n 'PIVOT',\n 'UNPIVOT',\n];\n","export const keywords: string[] = [\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords\n 'ALL',\n 'AND',\n 'ANY',\n 'AS',\n 'ASC',\n 'ASSERT_ROWS_MODIFIED',\n 'AT',\n 'BETWEEN',\n 'BY',\n 'CASE',\n 'CAST',\n 'COLLATE',\n 'CONTAINS',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'DEFAULT',\n 'DEFINE',\n 'DESC',\n 'DISTINCT',\n 'ELSE',\n 'END',\n 'ENUM',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCLUDE',\n 'EXISTS',\n 'EXTRACT',\n 'FALSE',\n 'FETCH',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'GROUP',\n 'GROUPING',\n 'GROUPS',\n 'HASH',\n 'HAVING',\n 'IF',\n 'IGNORE',\n 'IN',\n 'INNER',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JOIN',\n 'LATERAL',\n 'LEFT',\n 'LIMIT',\n 'LOOKUP',\n 'MERGE',\n 'NATURAL',\n 'NEW',\n 'NO',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'OF',\n 'ON',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVER',\n 'PARTITION',\n 'PRECEDING',\n 'PROTO',\n 'RANGE',\n 'RECURSIVE',\n 'RESPECT',\n 'RIGHT',\n 'ROLLUP',\n 'ROWS',\n 'SELECT',\n 'SET',\n 'SOME',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TO',\n 'TREAT',\n 'TRUE',\n 'UNBOUNDED',\n 'UNION',\n 'UNNEST',\n 'USING',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n\n // misc\n 'SAFE',\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n 'LIKE', // CREATE TABLE LIKE\n 'COPY', // CREATE TABLE COPY\n 'CLONE', // CREATE TABLE CLONE\n 'IN',\n 'OUT',\n 'INOUT',\n 'RETURNS',\n 'LANGUAGE',\n 'CASCADE',\n 'RESTRICT',\n 'DETERMINISTIC',\n];\n\nexport const dataTypes: string[] = [\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types\n 'ARRAY', // parametric, ARRAY\n 'BOOL',\n 'BYTES', // parameterised, BYTES(Length)\n 'DATE',\n 'DATETIME',\n 'GEOGRAPHY',\n 'INTERVAL',\n 'INT64',\n 'INT',\n 'SMALLINT',\n 'INTEGER',\n 'BIGINT',\n 'TINYINT',\n 'BYTEINT',\n 'NUMERIC', // parameterised, NUMERIC(Precision[, Scale])\n 'DECIMAL', // parameterised, DECIMAL(Precision[, Scale])\n 'BIGNUMERIC', // parameterised, BIGNUMERIC(Precision[, Scale])\n 'BIGDECIMAL', // parameterised, BIGDECIMAL(Precision[, Scale])\n 'FLOAT64',\n 'STRING', // parameterised, STRING(Length)\n 'STRUCT', // parametric, STRUCT\n 'TIME',\n 'TIMEZONE',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { functions } from './bigquery.functions.js';\nimport { dataTypes, keywords } from './bigquery.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT] [AS STRUCT | AS VALUE]']);\n\nconst reservedClauses = expandPhrases([\n // Queries: https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'QUALIFY',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'OMIT RECORD IF', // legacy\n // Data modification: https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax\n // - insert:\n 'INSERT [INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [BY SOURCE | BY TARGET] [THEN]',\n 'UPDATE SET',\n\n 'CLUSTER BY',\n 'FOR SYSTEM_TIME AS OF', // CREATE SNAPSHOT TABLE\n 'WITH CONNECTION',\n 'WITH PARTITION COLUMNS',\n 'REMOTE WITH CONNECTION',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n 'CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP [SNAPSHOT | EXTERNAL] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'ADD COLUMN [IF NOT EXISTS]',\n 'DROP COLUMN [IF EXISTS]',\n 'RENAME TO',\n 'ALTER COLUMN [IF EXISTS]',\n 'SET DEFAULT COLLATE', // for alter column\n 'SET OPTIONS', // for alter column\n 'DROP NOT NULL', // for alter column\n 'SET DATA TYPE', // for alter column\n // - alter schema\n 'ALTER SCHEMA [IF EXISTS]',\n // - alter view\n 'ALTER [MATERIALIZED] VIEW [IF EXISTS]',\n // - alter bi_capacity\n 'ALTER BI_CAPACITY',\n // - truncate:\n 'TRUNCATE TABLE',\n // - create schema\n 'CREATE SCHEMA [IF NOT EXISTS]',\n 'DEFAULT COLLATE',\n\n // stored procedures\n 'CREATE [OR REPLACE] [TEMP|TEMPORARY|TABLE] FUNCTION [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]',\n // row access policy\n 'CREATE [OR REPLACE] ROW ACCESS POLICY [IF NOT EXISTS]',\n 'GRANT TO',\n 'FILTER USING',\n // capacity\n 'CREATE CAPACITY',\n 'AS JSON',\n // reservation\n 'CREATE RESERVATION',\n // assignment\n 'CREATE ASSIGNMENT',\n // search index\n 'CREATE SEARCH INDEX [IF NOT EXISTS]',\n // drop\n 'DROP SCHEMA [IF EXISTS]',\n 'DROP [MATERIALIZED] VIEW [IF EXISTS]',\n 'DROP [TABLE] FUNCTION [IF EXISTS]',\n 'DROP PROCEDURE [IF EXISTS]',\n 'DROP ROW ACCESS POLICY',\n 'DROP ALL ROW ACCESS POLICIES',\n 'DROP CAPACITY [IF EXISTS]',\n 'DROP RESERVATION [IF EXISTS]',\n 'DROP ASSIGNMENT [IF EXISTS]',\n 'DROP SEARCH INDEX [IF EXISTS]',\n 'DROP [IF EXISTS]',\n // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language\n 'GRANT',\n 'REVOKE',\n // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting\n 'DECLARE',\n 'EXECUTE IMMEDIATE',\n 'LOOP',\n 'END LOOP',\n 'REPEAT',\n 'END REPEAT',\n 'WHILE',\n 'END WHILE',\n 'BREAK',\n 'LEAVE',\n 'CONTINUE',\n 'ITERATE',\n 'FOR',\n 'END FOR',\n 'BEGIN',\n 'BEGIN TRANSACTION',\n 'COMMIT TRANSACTION',\n 'ROLLBACK TRANSACTION',\n 'RAISE',\n 'RETURN',\n 'CALL',\n // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements\n 'ASSERT',\n // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements\n 'EXPORT DATA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION {ALL | DISTINCT}',\n 'EXCEPT DISTINCT',\n 'INTERSECT DISTINCT',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#tablesample_operator\n 'TABLESAMPLE SYSTEM',\n // From DDL: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n 'ANY TYPE',\n 'ALL COLUMNS',\n 'NOT DETERMINISTIC',\n // inside window definitions\n '{ROWS | RANGE} BETWEEN',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n]);\n\n// https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference\nexport const bigquery: DialectOptions = {\n name: 'bigquery',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...tabularOnelineClauses, ...standardOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: [\n // The triple-quoted strings are listed first, so they get matched first.\n // Otherwise the first two quotes of \"\"\" will get matched as an empty \"\" string.\n { quote: '\"\"\"..\"\"\"', prefixes: ['R', 'B', 'RB', 'BR'] },\n { quote: \"'''..'''\", prefixes: ['R', 'B', 'RB', 'BR'] },\n '\"\"-bs',\n \"''-bs\",\n { quote: '\"\"-raw', prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n { quote: \"''-raw\", prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { dashes: true },\n paramTypes: { positional: true, named: ['@'], quoted: ['@'] },\n variableTypes: [{ regex: String.raw`@@\\w+` }],\n lineCommentTypes: ['--', '#'],\n operators: ['&', '|', '^', '~', '>>', '<<', '||', '=>'],\n postProcess,\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]): Token[] {\n return detectArraySubscripts(combineParameterizedTypes(tokens));\n}\n\n// Converts OFFSET token inside array from RESERVED_CLAUSE to RESERVED_FUNCTION_NAME\n// See: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#array_subscript_operator\nfunction detectArraySubscripts(tokens: Token[]) {\n let prevToken = EOF_TOKEN;\n return tokens.map(token => {\n if (token.text === 'OFFSET' && prevToken.text === '[') {\n prevToken = token;\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n } else {\n prevToken = token;\n return token;\n }\n });\n}\n\n// Combines multiple tokens forming a parameterized type like STRUCT> into a single token\nfunction combineParameterizedTypes(tokens: Token[]) {\n const processed: Token[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if ((isToken.ARRAY(token) || isToken.STRUCT(token)) && tokens[i + 1]?.text === '<') {\n const endIndex = findClosingAngleBracketIndex(tokens, i + 1);\n const typeDefTokens = tokens.slice(i, endIndex + 1);\n processed.push({\n type: TokenType.IDENTIFIER,\n raw: typeDefTokens.map(formatTypeDefToken('raw')).join(''),\n text: typeDefTokens.map(formatTypeDefToken('text')).join(''),\n start: token.start,\n });\n i = endIndex;\n } else {\n processed.push(token);\n }\n }\n return processed;\n}\n\nconst formatTypeDefToken =\n (key: Extract) =>\n (token: Token): string => {\n if (token.type === TokenType.IDENTIFIER || token.type === TokenType.COMMA) {\n return token[key] + ' ';\n } else {\n return token[key];\n }\n };\n\nfunction findClosingAngleBracketIndex(tokens: Token[], startIndex: number): number {\n let level = 0;\n for (let i = startIndex; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.text === '<') {\n level++;\n } else if (token.text === '>') {\n level--;\n } else if (token.text === '>>') {\n level -= 2;\n }\n if (level === 0) {\n return i;\n }\n }\n return tokens.length - 1;\n}\n","export const functions: string[] = [\n // https://www.ibm.com/docs/en/db2/11.5?topic=bif-aggregate-functions\n 'ARRAY_AGG',\n 'AVG',\n 'CORRELATION',\n 'COUNT',\n 'COUNT_BIG',\n 'COVARIANCE',\n 'COVARIANCE_SAMP',\n 'CUME_DIST',\n 'GROUPING',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_ICPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'STDDEV',\n 'STDDEV_SAMP',\n 'SUM',\n 'VARIANCE',\n 'VARIANCE_SAMP',\n 'XMLAGG',\n 'XMLGROUP',\n\n // https://www.ibm.com/docs/en/db2/11.5?topic=bif-scalar-functions\n 'ABS',\n 'ABSVAL',\n 'ACOS',\n 'ADD_DAYS',\n 'ADD_HOURS',\n 'ADD_MINUTES',\n 'ADD_MONTHS',\n 'ADD_SECONDS',\n 'ADD_YEARS',\n 'AGE',\n 'ARRAY_DELETE',\n 'ARRAY_FIRST',\n 'ARRAY_LAST',\n 'ARRAY_NEXT',\n 'ARRAY_PRIOR',\n 'ASCII',\n 'ASCII_STR',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'BITAND',\n 'BITANDNOT',\n 'BITOR',\n 'BITXOR',\n 'BITNOT',\n 'BPCHAR',\n 'BSON_TO_JSON',\n 'BTRIM',\n 'CARDINALITY',\n 'CEILING',\n 'CEIL',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'COALESCE',\n 'COLLATION_KEY',\n 'COLLATION_KEY_BIT',\n 'COMPARE_DECFLOAT',\n 'CONCAT',\n 'COS',\n 'COSH',\n 'COT',\n 'CURSOR_ROWCOUNT',\n 'DATAPARTITIONNUM',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFWEEK_ISO',\n 'DAYOFYEAR',\n 'DAYS',\n 'DAYS_BETWEEN',\n 'DAYS_TO_END_OF_MONTH',\n 'DBPARTITIONNUM',\n 'DECFLOAT',\n 'DECFLOAT_FORMAT',\n 'DECODE',\n 'DECRYPT_BIN',\n 'DECRYPT_CHAR',\n 'DEGREES',\n 'DEREF',\n 'DIFFERENCE',\n 'DIGITS',\n 'DOUBLE_PRECISION',\n 'EMPTY_BLOB',\n 'EMPTY_CLOB',\n 'EMPTY_DBCLOB',\n 'EMPTY_NCLOB',\n 'ENCRYPT',\n 'EVENT_MON_STATE',\n 'EXP',\n 'EXTRACT',\n 'FIRST_DAY',\n 'FLOOR',\n 'FROM_UTC_TIMESTAMP',\n 'GENERATE_UNIQUE',\n 'GETHINT',\n 'GREATEST',\n 'HASH',\n 'HASH4',\n 'HASH8',\n 'HASHEDVALUE',\n 'HEX',\n 'HEXTORAW',\n 'HOUR',\n 'HOURS_BETWEEN',\n 'IDENTITY_VAL_LOCAL',\n 'IFNULL',\n 'INITCAP',\n 'INSERT',\n 'INSTR',\n 'INSTR2',\n 'INSTR4',\n 'INSTRB',\n 'INTNAND',\n 'INTNOR',\n 'INTNXOR',\n 'INTNNOT',\n 'ISNULL',\n 'JSON_ARRAY',\n 'JSON_OBJECT',\n 'JSON_QUERY',\n 'JSON_TO_BSON',\n 'JSON_VALUE',\n 'JULIAN_DAY',\n 'LAST_DAY',\n 'LCASE',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LENGTH2',\n 'LENGTH4',\n 'LENGTHB',\n 'LN',\n 'LOCATE',\n 'LOCATE_IN_STRING',\n 'LOG10',\n 'LONG_VARCHAR',\n 'LONG_VARGRAPHIC',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAX',\n 'MAX_CARDINALITY',\n 'MICROSECOND',\n 'MIDNIGHT_SECONDS',\n 'MIN',\n 'MINUTE',\n 'MINUTES_BETWEEN',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'MULTIPLY_ALT',\n 'NEXT_DAY',\n 'NEXT_MONTH',\n 'NEXT_QUARTER',\n 'NEXT_WEEK',\n 'NEXT_YEAR',\n 'NORMALIZE_DECFLOAT',\n 'NOW',\n 'NULLIF',\n 'NVL',\n 'NVL2',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PARAMETER',\n 'POSITION',\n 'POSSTR',\n 'POW',\n 'POWER',\n 'QUANTIZE',\n 'QUARTER',\n 'QUOTE_IDENT',\n 'QUOTE_LITERAL',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RAND',\n 'RANDOM',\n 'RAWTOHEX',\n 'REC2XML',\n 'REGEXP_COUNT',\n 'REGEXP_EXTRACT',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_MATCH_COUNT',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'RID',\n 'RID_BIT',\n 'RIGHT',\n 'ROUND',\n 'ROUND_TIMESTAMP',\n 'RPAD',\n 'RTRIM',\n 'SECLABEL',\n 'SECLABEL_BY_NAME',\n 'SECLABEL_TO_CHAR',\n 'SECOND',\n 'SECONDS_BETWEEN',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SOUNDEX',\n 'SPACE',\n 'SQRT',\n 'STRIP',\n 'STRLEFT',\n 'STRPOS',\n 'STRRIGHT',\n 'SUBSTR',\n 'SUBSTR2',\n 'SUBSTR4',\n 'SUBSTRB',\n 'SUBSTRING',\n 'TABLE_NAME',\n 'TABLE_SCHEMA',\n 'TAN',\n 'TANH',\n 'THIS_MONTH',\n 'THIS_QUARTER',\n 'THIS_WEEK',\n 'THIS_YEAR',\n 'TIMESTAMP_FORMAT',\n 'TIMESTAMP_ISO',\n 'TIMESTAMPDIFF',\n 'TIMEZONE',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_HEX',\n 'TO_MULTI_BYTE',\n 'TO_NCHAR',\n 'TO_NCLOB',\n 'TO_NUMBER',\n 'TO_SINGLE_BYTE',\n 'TO_TIMESTAMP',\n 'TO_UTC_TIMESTAMP',\n 'TOTALORDER',\n 'TRANSLATE',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUNC_TIMESTAMP',\n 'TRUNCATE',\n 'TRUNC',\n 'TYPE_ID',\n 'TYPE_NAME',\n 'TYPE_SCHEMA',\n 'UCASE',\n 'UNICODE_STR',\n 'UPPER',\n 'VALUE',\n 'VARCHAR_BIT_FORMAT',\n 'VARCHAR_FORMAT',\n 'VARCHAR_FORMAT_BIT',\n 'VERIFY_GROUP_FOR_USER',\n 'VERIFY_ROLE_FOR_USER',\n 'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER',\n 'WEEK',\n 'WEEK_ISO',\n 'WEEKS_BETWEEN',\n 'WIDTH_BUCKET',\n 'XMLATTRIBUTES',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLQUERY',\n 'XMLROW',\n 'XMLSERIALIZE',\n 'XMLTEXT',\n 'XMLVALIDATE',\n 'XMLXSROBJECTID',\n 'XSLTRANSFORM',\n 'YEAR',\n 'YEARS_BETWEEN',\n 'YMD_BETWEEN',\n\n // https://www.ibm.com/docs/en/db2/11.5?topic=bif-table-functions\n 'BASE_TABLE',\n 'JSON_TABLE',\n 'UNNEST',\n 'XMLTABLE',\n\n // https://www.ibm.com/docs/en/db2/11.5?topic=expressions-olap-specification\n // Additional function names not already present in the aggregate functions list\n 'RANK',\n 'DENSE_RANK',\n 'NTILE',\n 'LAG',\n 'LEAD',\n 'ROW_NUMBER',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'NTH_VALUE',\n 'RATIO_TO_REPORT',\n\n // Type casting\n 'CAST',\n];\n","export const keywords: string[] = [\n // https://www.ibm.com/docs/en/db2/11.5?topic=sql-reserved-schema-names-reserved-words\n 'ACTIVATE',\n 'ADD',\n 'AFTER',\n 'ALIAS',\n 'ALL',\n 'ALLOCATE',\n 'ALLOW',\n 'ALTER',\n 'AND',\n 'ANY',\n 'AS',\n 'ASENSITIVE',\n 'ASSOCIATE',\n 'ASUTIME',\n 'AT',\n 'ATTRIBUTES',\n 'AUDIT',\n 'AUTHORIZATION',\n 'AUX',\n 'AUXILIARY',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BINARY',\n 'BUFFERPOOL',\n 'BY',\n 'CACHE',\n 'CALL',\n 'CALLED',\n 'CAPTURE',\n 'CARDINALITY',\n 'CASCADED',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'CLONE',\n 'CLOSE',\n 'CLUSTER',\n 'COLLECTION',\n 'COLLID',\n 'COLUMN',\n 'COMMENT',\n 'COMMIT',\n 'CONCAT',\n 'CONDITION',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONTINUE',\n 'COUNT',\n 'COUNT_BIG',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_LC_CTYPE',\n 'CURRENT_PATH',\n 'CURRENT_SCHEMA',\n 'CURRENT_SERVER',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_USER',\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DATABASE',\n 'DATAPARTITIONNAME',\n 'DATAPARTITIONNUM',\n 'DAY',\n 'DAYS',\n 'DB2GENERAL',\n 'DB2GENRL',\n 'DB2SQL',\n 'DBINFO',\n 'DBPARTITIONNAME',\n 'DBPARTITIONNUM',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DEFAULTS',\n 'DEFINITION',\n 'DELETE',\n 'DENSERANK',\n 'DENSE_RANK',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DETERMINISTIC',\n 'DIAGNOSTICS',\n 'DISABLE',\n 'DISALLOW',\n 'DISCONNECT',\n 'DISTINCT',\n 'DO',\n 'DOCUMENT',\n 'DROP',\n 'DSSIZE',\n 'DYNAMIC',\n 'EACH',\n 'EDITPROC',\n 'ELSE',\n 'ELSEIF',\n 'ENABLE',\n 'ENCODING',\n 'ENCRYPTION',\n 'END',\n 'END-EXEC',\n 'ENDING',\n 'ERASE',\n 'ESCAPE',\n 'EVERY',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCLUDING',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'EXTENDED',\n 'EXTERNAL',\n 'EXTRACT',\n 'FENCED',\n 'FETCH',\n 'FIELDPROC',\n 'FILE',\n 'FINAL',\n 'FIRST1',\n 'FOR',\n 'FOREIGN',\n 'FREE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GENERAL',\n 'GENERATED',\n 'GET',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GRAPHIC',\n 'GROUP',\n 'HANDLER',\n 'HASH',\n 'HASHED_VALUE',\n 'HAVING',\n 'HINT',\n 'HOLD',\n 'HOUR',\n 'HOURS',\n 'IDENTITY',\n 'IF',\n 'IMMEDIATE',\n 'IMPORT',\n 'IN',\n 'INCLUDING',\n 'INCLUSIVE',\n 'INCREMENT',\n 'INDEX',\n 'INDICATOR',\n 'INDICATORS',\n 'INF',\n 'INFINITY',\n 'INHERIT',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INTEGRITY',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'ISOBID',\n 'ISOLATION',\n 'ITERATE',\n 'JAR',\n 'JAVA',\n 'JOIN',\n 'KEEP',\n 'KEY',\n 'LABEL',\n 'LANGUAGE',\n 'LAST3',\n 'LATERAL',\n 'LC_CTYPE',\n 'LEAVE',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINKTYPE',\n 'LOCAL',\n 'LOCALDATE',\n 'LOCALE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATOR',\n 'LOCATORS',\n 'LOCK',\n 'LOCKMAX',\n 'LOCKSIZE',\n 'LOOP',\n 'MAINTAINED',\n 'MATERIALIZED',\n 'MAXVALUE',\n 'MICROSECOND',\n 'MICROSECONDS',\n 'MINUTE',\n 'MINUTES',\n 'MINVALUE',\n 'MODE',\n 'MODIFIES',\n 'MONTH',\n 'MONTHS',\n 'NAN',\n 'NEW',\n 'NEW_TABLE',\n 'NEXTVAL',\n 'NO',\n 'NOCACHE',\n 'NOCYCLE',\n 'NODENAME',\n 'NODENUMBER',\n 'NOMAXVALUE',\n 'NOMINVALUE',\n 'NONE',\n 'NOORDER',\n 'NORMALIZED',\n 'NOT2',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'NUMPARTS',\n 'OBID',\n 'OF',\n 'OFF',\n 'OFFSET',\n 'OLD',\n 'OLD_TABLE',\n 'ON',\n 'OPEN',\n 'OPTIMIZATION',\n 'OPTIMIZE',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERRIDING',\n 'PACKAGE',\n 'PADDED',\n 'PAGESIZE',\n 'PARAMETER',\n 'PART',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONING',\n 'PARTITIONS',\n 'PASSWORD',\n 'PATH',\n 'PERCENT',\n 'PIECESIZE',\n 'PLAN',\n 'POSITION',\n 'PRECISION',\n 'PREPARE',\n 'PREVVAL',\n 'PRIMARY',\n 'PRIQTY',\n 'PRIVILEGES',\n 'PROCEDURE',\n 'PROGRAM',\n 'PSID',\n 'PUBLIC',\n 'QUERY',\n 'QUERYNO',\n 'RANGE',\n 'RANK',\n 'READ',\n 'READS',\n 'RECOVERY',\n 'REFERENCES',\n 'REFERENCING',\n 'REFRESH',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'RESET',\n 'RESIGNAL',\n 'RESTART',\n 'RESTRICT',\n 'RESULT',\n 'RESULT_SET_LOCATOR',\n 'RETURN',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLLBACK',\n 'ROUND_CEILING',\n 'ROUND_DOWN',\n 'ROUND_FLOOR',\n 'ROUND_HALF_DOWN',\n 'ROUND_HALF_EVEN',\n 'ROUND_HALF_UP',\n 'ROUND_UP',\n 'ROUTINE',\n 'ROW',\n 'ROWNUMBER',\n 'ROWS',\n 'ROWSET',\n 'ROW_NUMBER',\n 'RRN',\n 'RUN',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCRATCHPAD',\n 'SCROLL',\n 'SEARCH',\n 'SECOND',\n 'SECONDS',\n 'SECQTY',\n 'SECURITY',\n 'SELECT',\n 'SENSITIVE',\n 'SEQUENCE',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SIGNAL',\n 'SIMPLE',\n 'SNAN',\n 'SOME',\n 'SOURCE',\n 'SPECIFIC',\n 'SQL',\n 'SQLID',\n 'STACKED',\n 'STANDARD',\n 'START',\n 'STARTING',\n 'STATEMENT',\n 'STATIC',\n 'STATMENT',\n 'STAY',\n 'STOGROUP',\n 'STORES',\n 'STYLE',\n 'SUBSTRING',\n 'SUMMARY',\n 'SYNONYM',\n 'SYSFUN',\n 'SYSIBM',\n 'SYSPROC',\n 'SYSTEM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESPACE',\n 'THEN',\n 'TO',\n 'TRANSACTION',\n 'TRIGGER',\n 'TRIM',\n 'TRUNCATE',\n 'TYPE',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNTIL',\n 'UPDATE',\n 'USAGE',\n 'USER',\n 'USING',\n 'VALIDPROC',\n 'VALUE',\n 'VALUES',\n 'VARIABLE',\n 'VARIANT',\n 'VCAT',\n 'VERSION',\n 'VIEW',\n 'VOLATILE',\n 'VOLUMES',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WITHOUT',\n 'WLM',\n 'WRITE',\n 'XMLELEMENT',\n 'XMLEXISTS',\n 'XMLNAMESPACES',\n 'YEAR',\n 'YEARS',\n];\n\nexport const dataTypes: string[] = [\n // https://www.ibm.com/docs/en/db2-for-zos/12?topic=columns-data-types\n 'ARRAY',\n 'BIGINT',\n 'BINARY',\n 'BLOB',\n 'BOOLEAN',\n 'CCSID',\n 'CHAR',\n 'CHARACTER',\n 'CLOB',\n 'DATE',\n 'DATETIME',\n 'DBCLOB',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'GRAPHIC',\n 'INT',\n 'INT2',\n 'INT4',\n 'INT8',\n 'INTEGER',\n 'INTERVAL',\n 'LONG VARCHAR',\n 'LONG VARGRAPHIC',\n 'NCHAR',\n 'NCHR',\n 'NCLOB',\n 'NVARCHAR',\n 'NUMERIC',\n 'SMALLINT',\n 'REAL',\n 'TIME',\n 'TIMESTAMP',\n 'VARBINARY',\n 'VARCHAR',\n 'VARGRAPHIC',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2.functions.js';\nimport { dataTypes, keywords } from './db2.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY [INPUT SEQUENCE]',\n 'LIMIT',\n 'OFFSET',\n 'FETCH NEXT',\n 'FOR UPDATE [OF]',\n 'FOR {READ | FETCH} ONLY',\n 'FOR {RR | CS | UR | RS} [USE AND KEEP {SHARE | UPDATE | EXCLUSIVE} LOCKS]',\n 'WAIT FOR OUTCOME',\n 'SKIP LOCKED DATA',\n 'INTO',\n // Data modification\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'INSERT',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [GLOBAL TEMPORARY | EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] VIEW',\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n 'WITH {RR | RS | CS | UR}',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n 'SET DATA TYPE', // for alter column\n 'SET NOT NULL', // for alter column\n 'DROP {DEFAULT | GENERATED | NOT NULL}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://www.ibm.com/docs/en/db2/11.5?topic=s-statements\n 'ALLOCATE',\n 'ALTER AUDIT POLICY',\n 'ALTER BUFFERPOOL',\n 'ALTER DATABASE PARTITION GROUP',\n 'ALTER DATABASE',\n 'ALTER EVENT MONITOR',\n 'ALTER FUNCTION',\n 'ALTER HISTOGRAM TEMPLATE',\n 'ALTER INDEX',\n 'ALTER MASK',\n 'ALTER METHOD',\n 'ALTER MODULE',\n 'ALTER NICKNAME',\n 'ALTER PACKAGE',\n 'ALTER PERMISSION',\n 'ALTER PROCEDURE',\n 'ALTER SCHEMA',\n 'ALTER SECURITY LABEL COMPONENT',\n 'ALTER SECURITY POLICY',\n 'ALTER SEQUENCE',\n 'ALTER SERVER',\n 'ALTER SERVICE CLASS',\n 'ALTER STOGROUP',\n 'ALTER TABLESPACE',\n 'ALTER THRESHOLD',\n 'ALTER TRIGGER',\n 'ALTER TRUSTED CONTEXT',\n 'ALTER TYPE',\n 'ALTER USAGE LIST',\n 'ALTER USER MAPPING',\n 'ALTER VIEW',\n 'ALTER WORK ACTION SET',\n 'ALTER WORK CLASS SET',\n 'ALTER WORKLOAD',\n 'ALTER WRAPPER',\n 'ALTER XSROBJECT',\n 'ALTER STOGROUP',\n 'ALTER TABLESPACE',\n 'ALTER TRIGGER',\n 'ALTER TRUSTED CONTEXT',\n 'ALTER VIEW',\n 'ASSOCIATE [RESULT SET] {LOCATOR | LOCATORS}',\n 'AUDIT',\n 'BEGIN DECLARE SECTION',\n 'CALL',\n 'CLOSE',\n 'COMMENT ON',\n 'COMMIT [WORK]',\n 'CONNECT',\n 'CREATE [OR REPLACE] [PUBLIC] ALIAS',\n 'CREATE AUDIT POLICY',\n 'CREATE BUFFERPOOL',\n 'CREATE DATABASE PARTITION GROUP',\n 'CREATE EVENT MONITOR',\n 'CREATE [OR REPLACE] FUNCTION',\n 'CREATE FUNCTION MAPPING',\n 'CREATE HISTOGRAM TEMPLATE',\n 'CREATE [UNIQUE] INDEX',\n 'CREATE INDEX EXTENSION',\n 'CREATE [OR REPLACE] MASK',\n 'CREATE [SPECIFIC] METHOD',\n 'CREATE [OR REPLACE] MODULE',\n 'CREATE [OR REPLACE] NICKNAME',\n 'CREATE [OR REPLACE] PERMISSION',\n 'CREATE [OR REPLACE] PROCEDURE',\n 'CREATE ROLE',\n 'CREATE SCHEMA',\n 'CREATE SECURITY LABEL [COMPONENT]',\n 'CREATE SECURITY POLICY',\n 'CREATE [OR REPLACE] SEQUENCE',\n 'CREATE SERVICE CLASS',\n 'CREATE SERVER',\n 'CREATE STOGROUP',\n 'CREATE SYNONYM',\n 'CREATE [LARGE | REGULAR | {SYSTEM | USER} TEMPORARY] TABLESPACE',\n 'CREATE THRESHOLD',\n 'CREATE {TRANSFORM | TRANSFORMS} FOR',\n 'CREATE [OR REPLACE] TRIGGER',\n 'CREATE TRUSTED CONTEXT',\n 'CREATE [OR REPLACE] TYPE',\n 'CREATE TYPE MAPPING',\n 'CREATE USAGE LIST',\n 'CREATE USER MAPPING FOR',\n 'CREATE [OR REPLACE] VARIABLE',\n 'CREATE WORK ACTION SET',\n 'CREATE WORK CLASS SET',\n 'CREATE WORKLOAD',\n 'CREATE WRAPPER',\n 'DECLARE',\n 'DECLARE GLOBAL TEMPORARY TABLE',\n 'DESCRIBE [INPUT | OUTPUT]',\n 'DISCONNECT',\n 'DROP [PUBLIC] ALIAS',\n 'DROP AUDIT POLICY',\n 'DROP BUFFERPOOL',\n 'DROP DATABASE PARTITION GROUP',\n 'DROP EVENT MONITOR',\n 'DROP [SPECIFIC] FUNCTION',\n 'DROP FUNCTION MAPPING',\n 'DROP HISTOGRAM TEMPLATE',\n 'DROP INDEX [EXTENSION]',\n 'DROP MASK',\n 'DROP [SPECIFIC] METHOD',\n 'DROP MODULE',\n 'DROP NICKNAME',\n 'DROP PACKAGE',\n 'DROP PERMISSION',\n 'DROP [SPECIFIC] PROCEDURE',\n 'DROP ROLE',\n 'DROP SCHEMA',\n 'DROP SECURITY LABEL [COMPONENT]',\n 'DROP SECURITY POLICY',\n 'DROP SEQUENCE',\n 'DROP SERVER',\n 'DROP SERVICE CLASS',\n 'DROP STOGROUP',\n 'DROP TABLE HIERARCHY',\n 'DROP {TABLESPACE | TABLESPACES}',\n 'DROP {TRANSFORM | TRANSFORMS}',\n 'DROP THRESHOLD',\n 'DROP TRIGGER',\n 'DROP TRUSTED CONTEXT',\n 'DROP TYPE [MAPPING]',\n 'DROP USAGE LIST',\n 'DROP USER MAPPING FOR',\n 'DROP VARIABLE',\n 'DROP VIEW [HIERARCHY]',\n 'DROP WORK {ACTION | CLASS} SET',\n 'DROP WORKLOAD',\n 'DROP WRAPPER',\n 'DROP XSROBJECT',\n 'END DECLARE SECTION',\n 'EXECUTE [IMMEDIATE]',\n 'EXPLAIN {PLAN [SECTION] | ALL}',\n 'FETCH [FROM]',\n 'FLUSH {BUFFERPOOL | BUFFERPOOLS} ALL',\n 'FLUSH EVENT MONITOR',\n 'FLUSH FEDERATED CACHE',\n 'FLUSH OPTIMIZATION PROFILE CACHE',\n 'FLUSH PACKAGE CACHE [DYNAMIC]',\n 'FLUSH AUTHENTICATION CACHE [FOR ALL]',\n 'FREE LOCATOR',\n 'GET DIAGNOSTICS',\n 'GOTO',\n 'GRANT', // TODO: lots of syntax here\n 'INCLUDE',\n 'ITERATE',\n 'LEAVE',\n 'LOCK TABLE',\n 'LOOP',\n 'OPEN',\n 'PIPE',\n 'PREPARE',\n 'REFRESH TABLE',\n 'RELEASE',\n 'RELEASE [TO] SAVEPOINT',\n 'RENAME [TABLE | INDEX | STOGROUP | TABLESPACE]',\n 'REPEAT',\n 'RESIGNAL',\n 'RETURN',\n 'REVOKE', // TODO: lots of syntax here\n 'ROLLBACK [WORK] [TO SAVEPOINT]',\n 'SAVEPOINT',\n 'SET COMPILATION ENVIRONMENT',\n 'SET CONNECTION',\n 'SET CURRENT', // TODO: bunch of syntax here\n 'SET ENCRYPTION PASSWORD',\n 'SET EVENT MONITOR STATE',\n 'SET INTEGRITY',\n 'SET PASSTHRU',\n 'SET PATH',\n 'SET ROLE',\n 'SET SCHEMA',\n 'SET SERVER OPTION',\n 'SET {SESSION AUTHORIZATION | SESSION_USER}',\n 'SET USAGE LIST',\n 'SIGNAL',\n 'TRANSFER OWNERSHIP OF',\n 'WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}',\n 'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'SET NULL',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const db2: DialectOptions = {\n name: 'db2',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['G', 'N', 'U&'] },\n { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`],\n identChars: { first: '@#$', rest: '@#$' },\n paramTypes: { positional: true, named: [':'] },\n paramChars: { first: '@#$', rest: '@#$' },\n operators: [\n '**',\n '%',\n '|',\n '&',\n '^',\n '~',\n '¬=',\n '¬>',\n '¬<',\n '!>',\n '!<',\n '^=',\n '^>',\n '^<',\n '||',\n '->',\n '=>',\n ],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-aggregate\n // TODO: 'ANY', - conflicts with test for ANY predicate in 'operators.ys'!!\n 'ARRAY_AGG',\n 'AVG',\n 'CORR',\n 'CORRELATION',\n 'COUNT',\n 'COUNT_BIG',\n 'COVAR_POP',\n 'COVARIANCE',\n 'COVAR',\n 'COVAR_SAMP',\n 'COVARIANCE_SAMP',\n 'EVERY',\n 'GROUPING',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-regression'\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'SOME',\n 'STDDEV_POP',\n 'STDDEV',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VARIANCE',\n 'VAR',\n 'VAR_SAMP',\n 'VARIANCE_SAMP',\n 'XMLAGG',\n 'XMLGROUP',\n\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-scalar\n 'ABS',\n 'ABSVAL',\n 'ACOS',\n 'ADD_DAYS',\n 'ADD_HOURS',\n 'ADD_MINUTES',\n 'ADD_MONTHS',\n 'ADD_SECONDS',\n 'ADD_YEARS',\n 'ANTILOG',\n 'ARRAY_MAX_CARDINALITY',\n 'ARRAY_TRIM',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'BASE64_DECODE',\n 'BASE64_ENCODE',\n 'BIT_LENGTH',\n 'BITAND',\n 'BITANDNOT',\n 'BITNOT',\n 'BITOR',\n 'BITXOR',\n 'BSON_TO_JSON',\n 'CARDINALITY',\n 'CEIL',\n 'CEILING',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'COALESCE',\n 'COMPARE_DECFLOAT',\n 'CONCAT',\n 'CONTAINS',\n 'COS',\n 'COSH',\n 'COT',\n 'CURDATE',\n 'CURTIME',\n 'DATABASE',\n 'DATAPARTITIONNAME',\n 'DATAPARTITIONNUM',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK_ISO',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DAYS',\n 'DBPARTITIONNAME',\n 'DBPARTITIONNUM',\n 'DECFLOAT_FORMAT',\n 'DECFLOAT_SORTKEY',\n 'DECRYPT_BINARY',\n 'DECRYPT_BIT',\n 'DECRYPT_CHAR',\n 'DECRYPT_DB',\n 'DEGREES',\n 'DIFFERENCE',\n 'DIGITS',\n 'DLCOMMENT',\n 'DLLINKTYPE',\n 'DLURLCOMPLETE',\n 'DLURLPATH',\n 'DLURLPATHONLY',\n 'DLURLSCHEME',\n 'DLURLSERVER',\n 'DLVALUE',\n 'DOUBLE_PRECISION',\n 'DOUBLE',\n 'ENCRPYT',\n 'ENCRYPT_AES',\n 'ENCRYPT_AES256',\n 'ENCRYPT_RC2',\n 'ENCRYPT_TDES',\n 'EXP',\n 'EXTRACT',\n 'FIRST_DAY',\n 'FLOOR',\n 'GENERATE_UNIQUE',\n 'GET_BLOB_FROM_FILE',\n 'GET_CLOB_FROM_FILE',\n 'GET_DBCLOB_FROM_FILE',\n 'GET_XML_FILE',\n 'GETHINT',\n 'GREATEST',\n 'HASH_MD5',\n 'HASH_ROW',\n 'HASH_SHA1',\n 'HASH_SHA256',\n 'HASH_SHA512',\n 'HASH_VALUES',\n 'HASHED_VALUE',\n 'HEX',\n 'HEXTORAW',\n 'HOUR',\n 'HTML_ENTITY_DECODE',\n 'HTML_ENTITY_ENCODE',\n 'HTTP_DELETE_BLOB',\n 'HTTP_DELETE',\n 'HTTP_GET_BLOB',\n 'HTTP_GET',\n 'HTTP_PATCH_BLOB',\n 'HTTP_PATCH',\n 'HTTP_POST_BLOB',\n 'HTTP_POST',\n 'HTTP_PUT_BLOB',\n 'HTTP_PUT',\n 'IDENTITY_VAL_LOCAL',\n 'IFNULL',\n 'INSERT',\n 'INSTR',\n 'INTERPRET',\n 'ISFALSE',\n 'ISNOTFALSE',\n 'ISNOTTRUE',\n 'ISTRUE',\n 'JSON_ARRAY',\n 'JSON_OBJECT',\n 'JSON_QUERY',\n 'JSON_TO_BSON',\n 'JSON_UPDATE',\n 'JSON_VALUE',\n 'JULIAN_DAY',\n 'LAND',\n 'LAST_DAY',\n 'LCASE',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LN',\n 'LNOT',\n 'LOCATE_IN_STRING',\n 'LOCATE',\n 'LOG10',\n 'LOR',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAX_CARDINALITY',\n 'MAX',\n 'MICROSECOND',\n 'MIDNIGHT_SECONDS',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'MQREAD',\n 'MQREADCLOB',\n 'MQRECEIVE',\n 'MQRECEIVECLOB',\n 'MQSEND',\n 'MULTIPLY_ALT',\n 'NEXT_DAY',\n 'NORMALIZE_DECFLOAT',\n 'NOW',\n 'NULLIF',\n 'NVL',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PI',\n 'POSITION',\n 'POSSTR',\n 'POW',\n 'POWER',\n 'QUANTIZE',\n 'QUARTER',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RANDOM',\n 'RAND',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'RID',\n 'RIGHT',\n 'ROUND_TIMESTAMP',\n 'ROUND',\n 'RPAD',\n 'RRN',\n 'RTRIM',\n 'SCORE',\n 'SECOND',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SOUNDEX',\n 'SPACE',\n 'SQRT',\n 'STRIP',\n 'STRLEFT',\n 'STRPOS',\n 'STRRIGHT',\n 'SUBSTR',\n 'SUBSTRING',\n 'TABLE_NAME',\n 'TABLE_SCHEMA',\n 'TAN',\n 'TANH',\n 'TIMESTAMP_FORMAT',\n 'TIMESTAMP_ISO',\n 'TIMESTAMPDIFF_BIG',\n 'TIMESTAMPDIFF',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TO_TIMESTAMP',\n 'TOTALORDER',\n 'TRANSLATE',\n 'TRIM_ARRAY',\n 'TRIM',\n 'TRUNC_TIMESTAMP',\n 'TRUNC',\n 'TRUNCATE',\n 'UCASE',\n 'UPPER',\n 'URL_DECODE',\n 'URL_ENCODE',\n 'VALUE',\n 'VARBINARY_FORMAT',\n 'VARCHAR_BIT_FORMAT',\n 'VARCHAR_FORMAT_BINARY',\n 'VARCHAR_FORMAT',\n 'VERIFY_GROUP_FOR_USER',\n 'WEEK_ISO',\n 'WEEK',\n 'WRAP',\n 'XMLATTRIBUTES',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROW',\n 'XMLSERIALIZE',\n 'XMLTEXT',\n 'XMLVALIDATE',\n 'XOR',\n 'XSLTRANSFORM',\n 'YEAR',\n 'ZONED',\n\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-table\n 'BASE_TABLE',\n 'HTTP_DELETE_BLOB_VERBOSE',\n 'HTTP_DELETE_VERBOSE',\n 'HTTP_GET_BLOB_VERBOSE',\n 'HTTP_GET_VERBOSE',\n 'HTTP_PATCH_BLOB_VERBOSE',\n 'HTTP_PATCH_VERBOSE',\n 'HTTP_POST_BLOB_VERBOSE',\n 'HTTP_POST_VERBOSE',\n 'HTTP_PUT_BLOB_VERBOSE',\n 'HTTP_PUT_VERBOSE',\n 'JSON_TABLE',\n 'MQREADALL',\n 'MQREADALLCLOB',\n 'MQRECEIVEALL',\n 'MQRECEIVEALLCLOB',\n 'XMLTABLE',\n\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row\n 'UNPACK',\n\n // https://www.ibm.com/docs/en/i/7.5?topic=expressions-olap-specifications\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n\n // Type casting\n 'CAST',\n];\n","export const keywords: string[] = [\n // https://www.ibm.com/docs/en/i/7.5?topic=words-reserved\n // TODO: This list likely contains all keywords, not only the reserved ones,\n // try to filter it down to just the reserved keywords.\n 'ABSENT',\n 'ACCORDING',\n 'ACCTNG',\n 'ACTION',\n 'ACTIVATE',\n 'ADD',\n 'ALIAS',\n 'ALL',\n 'ALLOCATE',\n 'ALLOW',\n 'ALTER',\n 'AND',\n 'ANY',\n 'APPEND',\n 'APPLNAME',\n 'ARRAY',\n 'ARRAY_AGG',\n 'ARRAY_TRIM',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'ASSOCIATE',\n 'ATOMIC',\n 'ATTACH',\n 'ATTRIBUTES',\n 'AUTHORIZATION',\n 'AUTONOMOUS',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BIND',\n 'BSON',\n 'BUFFERPOOL',\n 'BY',\n 'CACHE',\n 'CALL',\n 'CALLED',\n 'CARDINALITY',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'CL',\n 'CLOSE',\n 'CLUSTER',\n 'COLLECT',\n 'COLLECTION',\n 'COLUMN',\n 'COMMENT',\n 'COMMIT',\n 'COMPACT',\n 'COMPARISONS',\n 'COMPRESS',\n 'CONCAT',\n 'CONCURRENT',\n 'CONDITION',\n 'CONNECT',\n 'CONNECT_BY_ROOT',\n 'CONNECTION',\n 'CONSTANT',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONTENT',\n 'CONTINUE',\n 'COPY',\n 'COUNT',\n 'COUNT_BIG',\n 'CREATE',\n 'CREATEIN',\n 'CROSS',\n 'CUBE',\n 'CUME_DIST',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_PATH',\n 'CURRENT_SCHEMA',\n 'CURRENT_SERVER',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_USER',\n 'CURSOR',\n 'CYCLE',\n 'DATABASE',\n 'DATAPARTITIONNAME',\n 'DATAPARTITIONNUM',\n 'DAY',\n 'DAYS',\n 'DB2GENERAL',\n 'DB2GENRL',\n 'DB2SQL',\n 'DBINFO',\n 'DBPARTITIONNAME',\n 'DBPARTITIONNUM',\n 'DEACTIVATE',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DEFAULTS',\n 'DEFER',\n 'DEFINE',\n 'DEFINITION',\n 'DELETE',\n 'DELETING',\n 'DENSE_RANK',\n 'DENSERANK',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DETACH',\n 'DETERMINISTIC',\n 'DIAGNOSTICS',\n 'DISABLE',\n 'DISALLOW',\n 'DISCONNECT',\n 'DISTINCT',\n 'DO',\n 'DOCUMENT',\n 'DROP',\n 'DYNAMIC',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'EMPTY',\n 'ENABLE',\n 'ENCODING',\n 'ENCRYPTION',\n 'END',\n 'END-EXEC',\n 'ENDING',\n 'ENFORCED',\n 'ERROR',\n 'ESCAPE',\n 'EVERY',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCLUDING',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTEND',\n 'EXTERNAL',\n 'EXTRACT',\n 'FALSE',\n 'FENCED',\n 'FETCH',\n 'FIELDPROC',\n 'FILE',\n 'FINAL',\n 'FIRST_VALUE',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FREE',\n 'FREEPAGE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GBPCACHE',\n 'GENERAL',\n 'GENERATED',\n 'GET',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HANDLER',\n 'HASH',\n 'HASH_ROW',\n 'HASHED_VALUE',\n 'HAVING',\n 'HINT',\n 'HOLD',\n 'HOUR',\n 'HOURS',\n // 'ID', Not actually a reserved keyword\n 'IDENTITY',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IMPLICITLY',\n 'IN',\n 'INCLUDE',\n 'INCLUDING',\n 'INCLUSIVE',\n 'INCREMENT',\n 'INDEX',\n 'INDEXBP',\n 'INDICATOR',\n 'INF',\n 'INFINITY',\n 'INHERIT',\n 'INLINE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INSERTING',\n 'INTEGRITY',\n 'INTERPRET',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'ISOLATION',\n 'ITERATE',\n 'JAVA',\n 'JOIN',\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_ARRAYAGG',\n 'JSON_EXISTS',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_QUERY',\n 'JSON_TABLE',\n 'JSON_VALUE',\n 'KEEP',\n 'KEY',\n 'KEYS',\n 'LABEL',\n 'LAG',\n 'LANGUAGE',\n 'LAST_VALUE',\n 'LATERAL',\n 'LEAD',\n 'LEAVE',\n 'LEFT',\n 'LEVEL2',\n 'LIKE',\n 'LIMIT',\n 'LINKTYPE',\n 'LISTAGG',\n 'LOCAL',\n 'LOCALDATE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATION',\n 'LOCATOR',\n 'LOCK',\n 'LOCKSIZE',\n 'LOG',\n 'LOGGED',\n 'LOOP',\n 'MAINTAINED',\n 'MASK',\n 'MATCHED',\n 'MATERIALIZED',\n 'MAXVALUE',\n 'MERGE',\n 'MICROSECOND',\n 'MICROSECONDS',\n 'MINPCTUSED',\n 'MINUTE',\n 'MINUTES',\n 'MINVALUE',\n 'MIRROR',\n 'MIXED',\n 'MODE',\n 'MODIFIES',\n 'MONTH',\n 'MONTHS',\n 'NAMESPACE',\n 'NAN',\n 'NATIONAL',\n 'NCHAR',\n 'NCLOB',\n 'NESTED',\n 'NEW',\n 'NEW_TABLE',\n 'NEXTVAL',\n 'NO',\n 'NOCACHE',\n 'NOCYCLE',\n 'NODENAME',\n 'NODENUMBER',\n 'NOMAXVALUE',\n 'NOMINVALUE',\n 'NONE',\n 'NOORDER',\n 'NORMALIZED',\n 'NOT',\n 'NOTNULL',\n 'NTH_VALUE',\n 'NTILE',\n 'NULL',\n 'NULLS',\n 'NVARCHAR',\n 'OBID',\n 'OBJECT',\n 'OF',\n 'OFF',\n 'OFFSET',\n 'OLD',\n 'OLD_TABLE',\n 'OMIT',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OPTIMIZE',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'ORDINALITY',\n 'ORGANIZE',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAY',\n 'OVERRIDING',\n 'PACKAGE',\n 'PADDED',\n 'PAGE',\n 'PAGESIZE',\n 'PARAMETER',\n 'PART',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONING',\n 'PARTITIONS',\n 'PASSING',\n 'PASSWORD',\n 'PATH',\n 'PCTFREE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERIOD',\n 'PERMISSION',\n 'PIECESIZE',\n 'PIPE',\n 'PLAN',\n 'POSITION',\n 'PREPARE',\n 'PREVVAL',\n 'PRIMARY',\n 'PRIOR',\n 'PRIQTY',\n 'PRIVILEGES',\n 'PROCEDURE',\n 'PROGRAM',\n 'PROGRAMID',\n 'QUERY',\n 'RANGE',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'RCDFMT',\n 'READ',\n 'READS',\n 'RECOVERY',\n 'REFERENCES',\n 'REFERENCING',\n 'REFRESH',\n 'REGEXP_LIKE',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'RESET',\n 'RESIGNAL',\n 'RESTART',\n 'RESULT',\n 'RESULT_SET_LOCATOR',\n 'RETURN',\n 'RETURNING',\n 'RETURNS',\n 'REVOKE',\n 'RID',\n 'RIGHT',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROUTINE',\n 'ROW',\n 'ROW_NUMBER',\n 'ROWNUMBER',\n 'ROWS',\n 'RRN',\n 'RUN',\n 'SAVEPOINT',\n 'SBCS',\n 'SCALAR',\n 'SCHEMA',\n 'SCRATCHPAD',\n 'SCROLL',\n 'SEARCH',\n 'SECOND',\n 'SECONDS',\n 'SECQTY',\n 'SECURED',\n 'SELECT',\n 'SENSITIVE',\n 'SEQUENCE',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SIGNAL',\n 'SIMPLE',\n 'SKIP',\n 'SNAN',\n 'SOME',\n 'SOURCE',\n 'SPECIFIC',\n 'SQL',\n 'SQLID',\n 'SQLIND_DEFAULT',\n 'SQLIND_UNASSIGNED',\n 'STACKED',\n 'START',\n 'STARTING',\n 'STATEMENT',\n 'STATIC',\n 'STOGROUP',\n 'SUBSTRING',\n 'SUMMARY',\n 'SYNONYM',\n 'SYSTEM_TIME',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESPACE',\n 'TABLESPACES',\n 'TAG',\n 'THEN',\n 'THREADSAFE',\n 'TO',\n 'TRANSACTION',\n 'TRANSFER',\n 'TRIGGER',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUE',\n 'TRUNCATE',\n 'TRY_CAST',\n 'TYPE',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNIT',\n 'UNKNOWN',\n 'UNNEST',\n 'UNTIL',\n 'UPDATE',\n 'UPDATING',\n 'URI',\n 'USAGE',\n 'USE',\n 'USER',\n 'USERID',\n 'USING',\n 'VALUE',\n 'VALUES',\n 'VARIABLE',\n 'VARIANT',\n 'VCAT',\n 'VERSION',\n 'VERSIONING',\n 'VIEW',\n 'VOLATILE',\n 'WAIT',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WITHIN',\n 'WITHOUT',\n 'WRAPPED',\n 'WRAPPER',\n 'WRITE',\n 'WRKSTNNAME',\n 'XMLAGG',\n 'XMLATTRIBUTES',\n 'XMLCAST',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLGROUP',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROW',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XMLTEXT',\n 'XMLVALIDATE',\n 'XSLTRANSFORM',\n 'XSROBJECT',\n 'YEAR',\n 'YEARS',\n 'YES',\n 'ZONE',\n];\n\nexport const dataTypes: string[] = [\n // https://www.ibm.com/docs/en/i/7.2?topic=iaodsd-odbc-data-types-how-they-correspond-db2-i-database-types\n 'ARRAY',\n 'BIGINT',\n 'BINARY',\n 'BIT',\n 'BLOB',\n 'BOOLEAN',\n 'CCSID',\n 'CHAR',\n 'CHARACTER',\n 'CLOB',\n 'DATA',\n 'DATALINK',\n 'DATE',\n 'DBCLOB',\n 'DECFLOAT',\n 'DECIMAL',\n 'DEC',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'FLOAT',\n 'GRAPHIC',\n 'INT',\n 'INTEGER',\n 'LONG',\n 'NUMERIC',\n 'REAL',\n 'ROWID',\n 'SMALLINT',\n 'TIME',\n 'TIMESTAMP',\n 'VARBINARY',\n 'VARCHAR',\n 'VARGRAPHIC',\n 'XML',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2i.functions.js';\nimport { dataTypes, keywords } from './db2i.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'INTO',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER [SIBLINGS] BY [INPUT SEQUENCE]',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR UPDATE [OF]',\n 'FOR READ ONLY',\n 'OPTIMIZE FOR',\n // Data modification\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'DELETE',\n 'INSERT',\n // Data definition - table\n 'FOR SYSTEM NAME',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [OR REPLACE] TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [RECURSIVE] VIEW',\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n 'WITH {NC | RR | RS | CS | UR}',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE',\n // alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'ALTER [COLUMN]',\n 'DROP [COLUMN]',\n 'SET DATA TYPE', // for alter column\n 'SET {GENERATED ALWAYS | GENERATED BY DEFAULT}', // for alter column\n 'SET NOT NULL', // for alter column\n 'SET {NOT HIDDEN | IMPLICITLY HIDDEN}', // for alter column\n 'SET FIELDPROC', // for alter column\n 'DROP {DEFAULT | NOT NULL | GENERATED | IDENTITY | ROW CHANGE TIMESTAMP | FIELDPROC}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // other\n 'SET [CURRENT] SCHEMA',\n 'SET CURRENT_SCHEMA',\n // https://www.ibm.com/docs/en/i/7.5?topic=reference-statements\n 'ALLOCATE CURSOR',\n 'ALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL] SQL',\n 'ALTER [SPECIFIC] {FUNCTION | PROCEDURE}',\n 'ALTER {MASK | PERMISSION | SEQUENCE | TRIGGER}',\n 'ASSOCIATE [RESULT SET] {LOCATOR | LOCATORS}',\n 'BEGIN DECLARE SECTION',\n 'CALL',\n 'CLOSE',\n 'COMMENT ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PARAMETER | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n 'COMMENT ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n 'COMMENT ON PARAMETER SPECIFIC {FUNCTION | PROCEDURE | ROUTINE}',\n 'COMMENT ON [TABLE FUNCTION] RETURN COLUMN',\n 'COMMENT ON [TABLE FUNCTION] RETURN COLUMN SPECIFIC [PROCEDURE | ROUTINE]',\n 'COMMIT [WORK] [HOLD]',\n 'CONNECT [TO | RESET] USER',\n 'CREATE [OR REPLACE] {ALIAS | FUNCTION | MASK | PERMISSION | PROCEDURE | SEQUENCE | TRIGGER | VARIABLE}',\n 'CREATE [ENCODED VECTOR] INDEX',\n 'CREATE UNIQUE [WHERE NOT NULL] INDEX',\n 'CREATE SCHEMA',\n 'CREATE TYPE',\n 'DEALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'DECLARE CURSOR',\n 'DECLARE GLOBAL TEMPORARY TABLE',\n 'DECLARE',\n 'DESCRIBE CURSOR',\n 'DESCRIBE INPUT',\n 'DESCRIBE [OUTPUT]',\n 'DESCRIBE {PROCEDURE | ROUTINE}',\n 'DESCRIBE TABLE',\n 'DISCONNECT ALL [SQL]',\n 'DISCONNECT [CURRENT]',\n 'DROP {ALIAS | INDEX | MASK | PACKAGE | PERMISSION | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT} [IF EXISTS]',\n 'DROP [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE} [IF EXISTS]',\n 'END DECLARE SECTION',\n 'EXECUTE [IMMEDIATE]',\n // 'FETCH {NEXT | PRIOR | FIRST | LAST | BEFORE | AFTER | CURRENT} [FROM]',\n 'FREE LOCATOR',\n 'GET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'GET [CURRENT | STACKED] DIAGNOSTICS',\n 'GRANT {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n 'HOLD LOCATOR',\n 'INCLUDE',\n 'LABEL ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n 'LABEL ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n 'LOCK TABLE',\n 'OPEN',\n 'PREPARE',\n 'REFRESH TABLE',\n 'RELEASE',\n 'RELEASE [TO] SAVEPOINT',\n 'RENAME [TABLE | INDEX] TO',\n 'REVOKE {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n 'ROLLBACK [WORK] [HOLD | TO SAVEPOINT]',\n 'SAVEPOINT',\n 'SET CONNECTION',\n 'SET CURRENT {DEBUG MODE | DECFLOAT ROUNDING MODE | DEGREE | IMPLICIT XMLPARSE OPTION | TEMPORAL SYSTEM_TIME}',\n 'SET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'SET ENCRYPTION PASSWORD',\n 'SET OPTION',\n 'SET {[CURRENT [FUNCTION]] PATH | CURRENT_PATH}',\n 'SET RESULT SETS [WITH RETURN [TO CALLER | TO CLIENT]]',\n 'SET SESSION AUTHORIZATION',\n 'SET SESSION_USER',\n 'SET TRANSACTION',\n 'SIGNAL SQLSTATE [VALUE]',\n 'TAG',\n 'TRANSFER OWNERSHIP OF',\n 'WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '[LEFT | RIGHT] EXCEPTION JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'SET NULL',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://www.ibm.com/docs/en/i/7.5?topic=reference-sql\nexport const db2i: DialectOptions = {\n name: 'db2i',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n nestedBlockComments: true,\n extraParens: ['[]'],\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['G', 'N'] },\n { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`],\n identChars: { first: '@#$', rest: '@#$' },\n paramTypes: { positional: true, named: [':'] },\n paramChars: { first: '@#$', rest: '@#$' },\n operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||', '=>'],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF\n // math\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'BIN',\n 'BROUND',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CONV',\n 'COS',\n 'DEGREES',\n // 'E',\n 'EXP',\n 'FACTORIAL',\n 'FLOOR',\n 'GREATEST',\n 'HEX',\n 'LEAST',\n 'LN',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'NEGATIVE',\n 'PI',\n 'PMOD',\n 'POSITIVE',\n 'POW',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SHIFTLEFT',\n 'SHIFTRIGHT',\n 'SHIFTRIGHTUNSIGNED',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'TAN',\n 'UNHEX',\n 'WIDTH_BUCKET',\n\n // array\n 'ARRAY_CONTAINS',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'SIZE',\n 'SORT_ARRAY',\n\n // conversion\n 'BINARY',\n 'CAST',\n\n // date\n 'ADD_MONTHS',\n 'DATE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATEDIFF',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFYEAR',\n 'EXTRACT',\n 'FROM_UNIXTIME',\n 'FROM_UTC_TIMESTAMP',\n 'HOUR',\n 'LAST_DAY',\n 'MINUTE',\n 'MONTH',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'QUARTER',\n 'SECOND',\n 'TIMESTAMP',\n 'TO_DATE',\n 'TO_UTC_TIMESTAMP',\n 'TRUNC',\n 'UNIX_TIMESTAMP',\n 'WEEKOFYEAR',\n 'YEAR',\n\n // conditional\n 'ASSERT_TRUE',\n 'COALESCE',\n 'IF',\n 'ISNOTNULL',\n 'ISNULL',\n 'NULLIF',\n 'NVL',\n\n // string\n 'ASCII',\n 'BASE64',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONTEXT_NGRAMS',\n 'DECODE',\n 'ELT',\n 'ENCODE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FORMAT_NUMBER',\n 'GET_JSON_OBJECT',\n 'IN_FILE',\n 'INITCAP',\n 'INSTR',\n 'LCASE',\n 'LENGTH',\n 'LEVENSHTEIN',\n 'LOCATE',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'NGRAMS',\n 'OCTET_LENGTH',\n 'PARSE_URL',\n 'PRINTF',\n 'QUOTE',\n 'REGEXP_EXTRACT',\n 'REGEXP_REPLACE',\n 'REPEAT',\n 'REVERSE',\n 'RPAD',\n 'RTRIM',\n 'SENTENCES',\n 'SOUNDEX',\n 'SPACE',\n 'SPLIT',\n 'STR_TO_MAP',\n 'SUBSTR',\n 'SUBSTRING',\n 'TRANSLATE',\n 'TRIM',\n 'UCASE',\n 'UNBASE64',\n 'UPPER',\n\n // masking\n 'MASK',\n 'MASK_FIRST_N',\n 'MASK_HASH',\n 'MASK_LAST_N',\n 'MASK_SHOW_FIRST_N',\n 'MASK_SHOW_LAST_N',\n\n // misc\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'CRC32',\n 'CURRENT_DATABASE',\n 'CURRENT_USER',\n 'HASH',\n 'JAVA_METHOD',\n 'LOGGED_IN_USER',\n 'MD5',\n 'REFLECT',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SURROGATE_KEY',\n 'VERSION',\n\n // aggregate\n 'AVG',\n 'COLLECT_LIST',\n 'COLLECT_SET',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'HISTOGRAM_NUMERIC',\n 'MAX',\n 'MIN',\n 'NTILE',\n 'PERCENTILE',\n 'PERCENTILE_APPROX',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n\n // table\n 'EXPLODE',\n 'INLINE',\n 'JSON_TUPLE',\n 'PARSE_URL_TUPLE',\n 'POSEXPLODE',\n 'STACK',\n\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics\n 'LEAD',\n 'LAG',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'RANK',\n 'ROW_NUMBER',\n 'DENSE_RANK',\n 'CUME_DIST',\n 'PERCENT_RANK',\n 'NTILE',\n];\n","export const keywords: string[] = [\n // https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl\n // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names\n 'ADD',\n 'ADMIN',\n 'AFTER',\n 'ANALYZE',\n 'ARCHIVE',\n 'ASC',\n 'BEFORE',\n 'BUCKET',\n 'BUCKETS',\n 'CASCADE',\n 'CHANGE',\n 'CLUSTER',\n 'CLUSTERED',\n 'CLUSTERSTATUS',\n 'COLLECTION',\n 'COLUMNS',\n 'COMMENT',\n 'COMPACT',\n 'COMPACTIONS',\n 'COMPUTE',\n 'CONCATENATE',\n 'CONTINUE',\n 'DATA',\n 'DATABASES',\n 'DATETIME',\n 'DAY',\n 'DBPROPERTIES',\n 'DEFERRED',\n 'DEFINED',\n 'DELIMITED',\n 'DEPENDENCY',\n 'DESC',\n 'DIRECTORIES',\n 'DIRECTORY',\n 'DISABLE',\n 'DISTRIBUTE',\n 'ELEM_TYPE',\n 'ENABLE',\n 'ESCAPED',\n 'EXCLUSIVE',\n 'EXPLAIN',\n 'EXPORT',\n 'FIELDS',\n 'FILE',\n 'FILEFORMAT',\n 'FIRST',\n 'FORMAT',\n 'FORMATTED',\n 'FUNCTIONS',\n 'HOLD_DDLTIME',\n 'HOUR',\n 'IDXPROPERTIES',\n 'IGNORE',\n 'INDEX',\n 'INDEXES',\n 'INPATH',\n 'INPUTDRIVER',\n 'INPUTFORMAT',\n 'ITEMS',\n 'JAR',\n 'KEYS',\n 'KEY_TYPE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCATION',\n 'LOCK',\n 'LOCKS',\n 'LOGICAL',\n 'LONG',\n 'MAPJOIN',\n 'MATERIALIZED',\n 'METADATA',\n 'MINUS',\n 'MINUTE',\n 'MONTH',\n 'MSCK',\n 'NOSCAN',\n 'NO_DROP',\n 'OFFLINE',\n 'OPTION',\n 'OUTPUTDRIVER',\n 'OUTPUTFORMAT',\n 'OVERWRITE',\n 'OWNER',\n 'PARTITIONED',\n 'PARTITIONS',\n 'PLUS',\n 'PRETTY',\n 'PRINCIPALS',\n 'PROTECTION',\n 'PURGE',\n 'READ',\n 'READONLY',\n 'REBUILD',\n 'RECORDREADER',\n 'RECORDWRITER',\n 'RELOAD',\n 'RENAME',\n 'REPAIR',\n 'REPLACE',\n 'REPLICATION',\n 'RESTRICT',\n 'REWRITE',\n 'ROLE',\n 'ROLES',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND',\n 'SEMI',\n 'SERDE',\n 'SERDEPROPERTIES',\n 'SERVER',\n 'SETS',\n 'SHARED',\n 'SHOW',\n 'SHOW_DATABASE',\n 'SKEWED',\n 'SORT',\n 'SORTED',\n 'SSL',\n 'STATISTICS',\n 'STORED',\n 'STREAMTABLE',\n 'STRING',\n 'TABLES',\n 'TBLPROPERTIES',\n 'TEMPORARY',\n 'TERMINATED',\n 'TINYINT',\n 'TOUCH',\n 'TRANSACTIONS',\n 'UNARCHIVE',\n 'UNDO',\n 'UNIONTYPE',\n 'UNLOCK',\n 'UNSET',\n 'UNSIGNED',\n 'URI',\n 'USE',\n 'UTC',\n 'UTCTIMESTAMP',\n 'VALUE_TYPE',\n 'VIEW',\n 'WHILE',\n 'YEAR',\n 'AUTOCOMMIT',\n 'ISOLATION',\n 'LEVEL',\n 'OFFSET',\n 'SNAPSHOT',\n 'TRANSACTION',\n 'WORK',\n 'WRITE',\n 'ABORT',\n 'KEY',\n 'LAST',\n 'NORELY',\n 'NOVALIDATE',\n 'NULLS',\n 'RELY',\n 'VALIDATE',\n 'DETAIL',\n 'DOW',\n 'EXPRESSION',\n 'OPERATOR',\n 'QUARTER',\n 'SUMMARY',\n 'VECTORIZATION',\n 'WEEK',\n 'YEARS',\n 'MONTHS',\n 'WEEKS',\n 'DAYS',\n 'HOURS',\n 'MINUTES',\n 'SECONDS',\n 'TIMESTAMPTZ',\n 'ZONE',\n\n // reserved\n 'ALL',\n 'ALTER',\n 'AND',\n 'AS',\n 'AUTHORIZATION',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CASE',\n 'CAST',\n 'COLUMN',\n 'CONF',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'CURSOR',\n 'DATABASE',\n 'DELETE',\n 'DESCRIBE',\n 'DISTINCT',\n 'DROP',\n 'ELSE',\n 'END',\n 'EXCHANGE',\n 'EXISTS',\n 'EXTENDED',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'HAVING',\n 'IF',\n 'IMPORT',\n 'IN',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JOIN',\n 'LATERAL',\n 'LEFT',\n 'LESS',\n 'LIKE',\n 'LOCAL',\n 'MACRO',\n 'MORE',\n 'NONE',\n 'NOT',\n 'NULL',\n 'OF',\n 'ON',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'PARTIALSCAN',\n 'PARTITION',\n 'PERCENT',\n 'PRECEDING',\n 'PRESERVE',\n 'PROCEDURE',\n 'RANGE',\n 'READS',\n 'REDUCE',\n 'REVOKE',\n 'RIGHT',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SELECT',\n 'SET',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TO',\n 'TRANSFORM',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUEJOIN',\n 'UPDATE',\n 'USER',\n 'USING',\n 'UTC_TMESTAMP',\n 'VALUES',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'COMMIT',\n 'ONLY',\n 'REGEXP',\n 'RLIKE',\n 'ROLLBACK',\n 'START',\n 'CACHE',\n 'CONSTRAINT',\n 'FOREIGN',\n 'PRIMARY',\n 'REFERENCES',\n 'DAYOFWEEK',\n 'EXTRACT',\n 'FLOOR',\n 'VIEWS',\n 'TIME',\n 'SYNC',\n\n // fileTypes\n 'TEXTFILE',\n 'SEQUENCEFILE',\n 'ORC',\n 'CSV',\n 'TSV',\n 'PARQUET',\n 'AVRO',\n 'RCFILE',\n 'JSONFILE',\n 'INPUTFORMAT',\n 'OUTPUTFORMAT',\n];\n\nexport const dataTypes: string[] = [\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types\n 'ARRAY',\n 'BIGINT',\n 'BINARY',\n 'BOOLEAN',\n 'CHAR',\n 'DATE',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTEGER',\n 'INTERVAL',\n 'MAP',\n 'NUMERIC',\n 'PRECISION',\n 'SMALLINT',\n 'STRUCT',\n 'TIMESTAMP',\n 'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './hive.functions.js';\nimport { dataTypes, keywords } from './hive.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'SORT BY',\n 'CLUSTER BY',\n 'DISTRIBUTE BY',\n 'LIMIT',\n // Data manipulation\n // - insert:\n // Hive does not actually support plain INSERT INTO, only INSERT INTO TABLE\n // but it's a nuisance to not support it, as all other dialects do.\n 'INSERT INTO [TABLE]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'INSERT [VALUES]',\n // - insert overwrite directory:\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries\n 'INSERT OVERWRITE [LOCAL] DIRECTORY',\n // - load:\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables\n 'LOAD DATA [LOCAL] INPATH',\n '[OVERWRITE] INTO TABLE',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'RENAME TO',\n // - truncate:\n 'TRUNCATE [TABLE]',\n // other\n 'ALTER',\n 'CREATE',\n 'USE',\n 'DESCRIBE',\n 'DROP',\n 'FETCH',\n 'SHOW',\n 'STORED AS',\n 'STORED BY',\n 'ROW FORMAT',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n // non-standard joins\n 'LEFT SEMI JOIN',\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE} BETWEEN']);\n\n// https://cwiki.apache.org/confluence/display/Hive/LanguageManual\nexport const hive: DialectOptions = {\n name: 'hive',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: ['\"\"-bs', \"''-bs\"],\n identTypes: ['``'],\n variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||'],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","import { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\n\n// Shared functionality used by all MariaDB-like SQL dialects.\n\nexport function postProcess(tokens: Token[]) {\n return tokens.map((token, i) => {\n const nextToken = tokens[i + 1] || EOF_TOKEN;\n if (isToken.SET(token) && nextToken.text === '(') {\n // This is SET datatype, not SET statement\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n const prevToken = tokens[i - 1] || EOF_TOKEN;\n if (isToken.VALUES(token) && prevToken.text === '=') {\n // This is VALUES() function, not VALUES clause\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n return token;\n });\n}\n","export const keywords: string[] = [\n // https://mariadb.com/kb/en/reserved-words/\n 'ACCESSIBLE',\n 'ADD',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'BEFORE',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CHANGE',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONDITION',\n 'CONSTRAINT',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATABASES',\n 'DAY_HOUR',\n 'DAY_MICROSECOND',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DECLARE',\n 'DEFAULT',\n 'DELAYED',\n 'DELETE',\n 'DELETE_DOMAIN_ID',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DISTINCTROW',\n 'DIV',\n 'DO_DOMAIN_IDS',\n 'DROP',\n 'DUAL',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'ENCLOSED',\n 'ESCAPED',\n 'EXCEPT',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FOR',\n 'FORCE',\n 'FOREIGN',\n 'FROM',\n 'FULLTEXT',\n 'GENERAL',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HIGH_PRIORITY',\n 'HOUR_MICROSECOND',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IF',\n 'IGNORE',\n 'IGNORE_DOMAIN_IDS',\n 'IGNORE_SERVER_IDS',\n 'IN',\n 'INDEX',\n 'INFILE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ITERATE',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KILL',\n 'LEADING',\n 'LEAVE',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINEAR',\n 'LINES',\n 'LOAD',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCK',\n 'LOOP',\n 'LOW_PRIORITY',\n 'MASTER_HEARTBEAT_PERIOD',\n 'MASTER_SSL_VERIFY_SERVER_CERT',\n 'MATCH',\n 'MAXVALUE',\n 'MINUTE_MICROSECOND',\n 'MINUTE_SECOND',\n 'MOD',\n 'MODIFIES',\n 'NATURAL',\n 'NOT',\n 'NO_WRITE_TO_BINLOG',\n 'NULL',\n 'OFFSET',\n 'ON',\n 'OPTIMIZE',\n 'OPTION',\n 'OPTIONALLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTFILE',\n 'OVER',\n 'PAGE_CHECKSUM',\n 'PARSE_VCOL_EXPR',\n 'PARTITION',\n 'POSITION',\n 'PRIMARY',\n 'PROCEDURE',\n 'PURGE',\n 'RANGE',\n 'READ',\n 'READS',\n 'READ_WRITE',\n 'RECURSIVE',\n 'REF_SYSTEM_ID',\n 'REFERENCES',\n 'REGEXP',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'REPLACE',\n 'REQUIRE',\n 'RESIGNAL',\n 'RESTRICT',\n 'RETURN',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROW_NUMBER',\n 'ROWS',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND_MICROSECOND',\n 'SELECT',\n 'SENSITIVE',\n 'SEPARATOR',\n 'SET',\n 'SHOW',\n 'SIGNAL',\n 'SLOW',\n 'SPATIAL',\n 'SPECIFIC',\n 'SQL',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'SQL_BIG_RESULT',\n 'SQL_CALC_FOUND_ROWS',\n 'SQL_SMALL_RESULT',\n 'SSL',\n 'STARTING',\n 'STATS_AUTO_RECALC',\n 'STATS_PERSISTENT',\n 'STATS_SAMPLE_PAGES',\n 'STRAIGHT_JOIN',\n 'TABLE',\n 'TERMINATED',\n 'THEN',\n 'TO',\n 'TRAILING',\n 'TRIGGER',\n 'TRUE',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNLOCK',\n 'UNSIGNED',\n 'UPDATE',\n 'USAGE',\n 'USE',\n 'USING',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'VALUES',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WRITE',\n 'XOR',\n 'YEAR_MONTH',\n 'ZEROFILL',\n];\n\nexport const dataTypes: string[] = [\n // https://mariadb.com/kb/en/data-types/\n 'BIGINT',\n 'BINARY',\n 'BIT',\n 'BLOB',\n 'CHAR BYTE',\n 'CHAR',\n 'CHARACTER',\n 'DATETIME',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE PRECISION',\n 'DOUBLE',\n 'ENUM',\n 'FIXED',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'INT',\n 'INT1',\n 'INT2',\n 'INT3',\n 'INT4',\n 'INT8',\n 'INTEGER',\n 'LONG',\n 'LONGBLOB',\n 'LONGTEXT',\n 'MEDIUMBLOB',\n 'MEDIUMINT',\n 'MEDIUMTEXT',\n 'MIDDLEINT',\n 'NATIONAL CHAR',\n 'NATIONAL VARCHAR',\n 'NUMERIC',\n 'PRECISION',\n 'REAL',\n 'SMALLINT',\n 'TEXT',\n 'TIMESTAMP',\n 'TINYBLOB',\n 'TINYINT',\n 'TINYTEXT',\n 'VARBINARY',\n 'VARCHAR',\n 'VARCHARACTER',\n 'VARYING',\n 'YEAR',\n // 'NUMBER', // ?? In oracle mode only\n // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n // https://mariadb.com/kb/en/information-schema-sql_functions-table/\n 'ADDDATE',\n 'ADD_MONTHS',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAST',\n 'COUNT',\n 'CUME_DIST',\n 'CURDATE',\n 'CURTIME',\n 'DATE_ADD',\n 'DATE_SUB',\n 'DATE_FORMAT',\n 'DECODE',\n 'DENSE_RANK',\n 'EXTRACT',\n 'FIRST_VALUE',\n 'GROUP_CONCAT',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'LAG',\n 'LEAD',\n 'MAX',\n 'MEDIAN',\n 'MID',\n 'MIN',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'POSITION',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'ROW_NUMBER',\n 'SESSION_USER',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'SYSTEM_USER',\n 'TRIM',\n 'TRIM_ORACLE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'ABS',\n 'ACOS',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'BENCHMARK',\n 'BIN',\n 'BINLOG_GTID_POS',\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'CEIL',\n 'CEILING',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHR',\n 'COERCIBILITY',\n 'COLUMN_CHECK',\n 'COLUMN_EXISTS',\n 'COLUMN_LIST',\n 'COLUMN_JSON',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_OPERATOR_ORACLE',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'CRC32',\n 'DATEDIFF',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DEGREES',\n 'DECODE_HISTOGRAM',\n 'DECODE_ORACLE',\n 'DES_DECRYPT',\n 'DES_ENCRYPT',\n 'ELT',\n 'ENCODE',\n 'ENCRYPT',\n 'EXP',\n 'EXPORT_SET',\n 'EXTRACTVALUE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FLOOR',\n 'FORMAT',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GET_LOCK',\n 'GREATEST',\n 'HEX',\n 'IFNULL',\n 'INSTR',\n 'ISNULL',\n 'IS_FREE_LOCK',\n 'IS_USED_LOCK',\n 'JSON_ARRAY',\n 'JSON_ARRAY_APPEND',\n 'JSON_ARRAY_INSERT',\n 'JSON_COMPACT',\n 'JSON_CONTAINS',\n 'JSON_CONTAINS_PATH',\n 'JSON_DEPTH',\n 'JSON_DETAILED',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_LOOSE',\n 'JSON_MERGE',\n 'JSON_MERGE_PATCH',\n 'JSON_MERGE_PRESERVE',\n 'JSON_QUERY',\n 'JSON_QUOTE',\n 'JSON_OBJECT',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SET',\n 'JSON_SEARCH',\n 'JSON_TYPE',\n 'JSON_UNQUOTE',\n 'JSON_VALID',\n 'JSON_VALUE',\n 'LAST_DAY',\n 'LAST_INSERT_ID',\n 'LCASE',\n 'LEAST',\n 'LENGTH',\n 'LENGTHB',\n 'LN',\n 'LOAD_FILE',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LPAD_ORACLE',\n 'LTRIM',\n 'LTRIM_ORACLE',\n 'MAKEDATE',\n 'MAKETIME',\n 'MAKE_SET',\n 'MASTER_GTID_WAIT',\n 'MASTER_POS_WAIT',\n 'MD5',\n 'MONTHNAME',\n 'NAME_CONST',\n 'NVL',\n 'NVL2',\n 'OCT',\n 'OCTET_LENGTH',\n 'ORD',\n 'PERIOD_ADD',\n 'PERIOD_DIFF',\n 'PI',\n 'POW',\n 'POWER',\n 'QUOTE',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'RADIANS',\n 'RAND',\n 'RELEASE_ALL_LOCKS',\n 'RELEASE_LOCK',\n 'REPLACE_ORACLE',\n 'REVERSE',\n 'ROUND',\n 'RPAD',\n 'RPAD_ORACLE',\n 'RTRIM',\n 'RTRIM_ORACLE',\n 'SEC_TO_TIME',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SOUNDEX',\n 'SPACE',\n 'SQRT',\n 'STRCMP',\n 'STR_TO_DATE',\n 'SUBSTR_ORACLE',\n 'SUBSTRING_INDEX',\n 'SUBTIME',\n 'SYS_GUID',\n 'TAN',\n 'TIMEDIFF',\n 'TIME_FORMAT',\n 'TIME_TO_SEC',\n 'TO_BASE64',\n 'TO_CHAR',\n 'TO_DAYS',\n 'TO_SECONDS',\n 'UCASE',\n 'UNCOMPRESS',\n 'UNCOMPRESSED_LENGTH',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n 'UUID',\n 'UUID_SHORT',\n 'VERSION',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WSREP_LAST_WRITTEN_GTID',\n 'WSREP_LAST_SEEN_GTID',\n 'WSREP_SYNC_WAIT_UPTO_GTID',\n 'YEARWEEK',\n // CASE expression shorthands\n 'COALESCE',\n 'NULLIF',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from './likeMariaDb.js';\nimport { dataTypes, keywords } from './mariadb.keywords.js';\nimport { functions } from './mariadb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n 'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n 'VALUES',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n // other\n 'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE [LOW_PRIORITY] [IGNORE]',\n // - delete:\n 'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS]',\n 'ADD [COLUMN] [IF NOT EXISTS]',\n '{CHANGE | MODIFY} [COLUMN] [IF EXISTS]',\n 'DROP [COLUMN] [IF EXISTS]',\n 'RENAME [TO]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n 'SET {VISIBLE | INVISIBLE}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://mariadb.com/docs/reference/mdb/sql-statements/\n 'ALTER DATABASE',\n 'ALTER DATABASE COMMENT',\n 'ALTER EVENT',\n 'ALTER FUNCTION',\n 'ALTER PROCEDURE',\n 'ALTER SCHEMA',\n 'ALTER SCHEMA COMMENT',\n 'ALTER SEQUENCE',\n 'ALTER SERVER',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE',\n 'ANALYZE TABLE',\n 'BACKUP LOCK',\n 'BACKUP STAGE',\n 'BACKUP UNLOCK',\n 'BEGIN',\n 'BINLOG',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE MASTER TO',\n 'CHECK TABLE',\n 'CHECK VIEW',\n 'CHECKSUM TABLE',\n 'COMMIT',\n 'CREATE AGGREGATE FUNCTION',\n 'CREATE DATABASE',\n 'CREATE EVENT',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE PROCEDURE',\n 'CREATE ROLE',\n 'CREATE SEQUENCE',\n 'CREATE SERVER',\n 'CREATE SPATIAL INDEX',\n 'CREATE TRIGGER',\n 'CREATE UNIQUE INDEX',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DROP DATABASE',\n 'DROP EVENT',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP PREPARE',\n 'DROP PROCEDURE',\n 'DROP ROLE',\n 'DROP SEQUENCE',\n 'DROP SERVER',\n 'DROP TRIGGER',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'GET DIAGNOSTICS',\n 'GET DIAGNOSTICS CONDITION',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'INSTALL PLUGIN',\n 'INSTALL SONAME',\n 'KILL',\n 'LOAD DATA INFILE',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML INFILE',\n 'LOCK TABLE',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'PURGE MASTER LOGS',\n 'RELEASE SAVEPOINT',\n 'RENAME TABLE',\n 'RENAME USER',\n 'REPAIR TABLE',\n 'REPAIR VIEW',\n 'RESET MASTER',\n 'RESET QUERY CACHE',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESIGNAL',\n 'REVOKE',\n 'ROLLBACK',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET GLOBAL TRANSACTION',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET ROLE',\n 'SET STATEMENT',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW ALL REPLICAS STATUS',\n 'SHOW ALL SLAVES STATUS',\n 'SHOW AUTHORS',\n 'SHOW BINARY LOGS',\n 'SHOW BINLOG EVENTS',\n 'SHOW BINLOG STATUS',\n 'SHOW CHARACTER SET',\n 'SHOW CLIENT_STATISTICS',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CONTRIBUTORS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE EVENT',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PACKAGE',\n 'SHOW CREATE PACKAGE BODY',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE SEQUENCE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE TRIGGER',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINE INNODB STATUS',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW EVENTS',\n 'SHOW EXPLAIN',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW INDEXES',\n 'SHOW INDEX_STATISTICS',\n 'SHOW KEYS',\n 'SHOW LOCALES',\n 'SHOW MASTER LOGS',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PACKAGE BODY CODE',\n 'SHOW PACKAGE BODY STATUS',\n 'SHOW PACKAGE STATUS',\n 'SHOW PLUGINS',\n 'SHOW PLUGINS SONAME',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW QUERY_RESPONSE_TIME',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA',\n 'SHOW REPLICA HOSTS',\n 'SHOW REPLICA STATUS',\n 'SHOW SCHEMAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW SLAVE STATUS',\n 'SHOW STATUS',\n 'SHOW STORAGE ENGINES',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW TRIGGERS',\n 'SHOW USER_STATISTICS',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHOW WSREP_MEMBERSHIP',\n 'SHOW WSREP_STATUS',\n 'SHUTDOWN',\n 'SIGNAL',\n 'START ALL REPLICAS',\n 'START ALL SLAVES',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP ALL REPLICAS',\n 'STOP ALL SLAVES',\n 'STOP REPLICA',\n 'STOP SLAVE',\n 'UNINSTALL PLUGIN',\n 'UNINSTALL SONAME',\n 'UNLOCK TABLE',\n 'USE',\n 'XA BEGIN',\n 'XA COMMIT',\n 'XA END',\n 'XA PREPARE',\n 'XA RECOVER',\n 'XA ROLLBACK',\n 'XA START',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n 'MINUS [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n 'IDENTIFIED BY',\n]);\n\n// For reference: https://mariadb.com/kb/en/sql-statements-structure/\nexport const mariadb: DialectOptions = {\n name: 'mariadb',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n stringTypes: [\n '\"\"-qq-bs',\n \"''-qq-bs\",\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_.$]+' },\n { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n paramTypes: { positional: true },\n lineCommentTypes: ['--', '#'],\n operators: [\n '%',\n ':=',\n '&',\n '|',\n '^',\n '~',\n '<<',\n '>>',\n '<=>',\n '&&',\n '||',\n '!',\n '*.*', // Not actually an operator\n ],\n postProcess,\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const keywords: string[] = [\n // https://dev.mysql.com/doc/refman/8.0/en/keywords.html\n 'ACCESSIBLE', // (R)\n 'ADD', // (R)\n 'ALL', // (R)\n 'ALTER', // (R)\n 'ANALYZE', // (R)\n 'AND', // (R)\n 'AS', // (R)\n 'ASC', // (R)\n 'ASENSITIVE', // (R)\n 'BEFORE', // (R)\n 'BETWEEN', // (R)\n 'BOTH', // (R)\n 'BY', // (R)\n 'CALL', // (R)\n 'CASCADE', // (R)\n 'CASE', // (R)\n 'CHANGE', // (R)\n 'CHECK', // (R)\n 'COLLATE', // (R)\n 'COLUMN', // (R)\n 'CONDITION', // (R)\n 'CONSTRAINT', // (R)\n 'CONTINUE', // (R)\n 'CONVERT', // (R)\n 'CREATE', // (R)\n 'CROSS', // (R)\n 'CUBE', // (R)\n 'CUME_DIST', // (R)\n 'CURRENT_DATE', // (R)\n 'CURRENT_TIME', // (R)\n 'CURRENT_TIMESTAMP', // (R)\n 'CURRENT_USER', // (R)\n 'CURSOR', // (R)\n 'DATABASE', // (R)\n 'DATABASES', // (R)\n 'DAY_HOUR', // (R)\n 'DAY_MICROSECOND', // (R)\n 'DAY_MINUTE', // (R)\n 'DAY_SECOND', // (R)\n 'DECLARE', // (R)\n 'DEFAULT', // (R)\n 'DELAYED', // (R)\n 'DELETE', // (R)\n 'DENSE_RANK', // (R)\n 'DESC', // (R)\n 'DESCRIBE', // (R)\n 'DETERMINISTIC', // (R)\n 'DISTINCT', // (R)\n 'DISTINCTROW', // (R)\n 'DIV', // (R)\n 'DROP', // (R)\n 'DUAL', // (R)\n 'EACH', // (R)\n 'ELSE', // (R)\n 'ELSEIF', // (R)\n 'EMPTY', // (R)\n 'ENCLOSED', // (R)\n 'ESCAPED', // (R)\n 'EXCEPT', // (R)\n 'EXISTS', // (R)\n 'EXIT', // (R)\n 'EXPLAIN', // (R)\n 'FALSE', // (R)\n 'FETCH', // (R)\n 'FIRST_VALUE', // (R)\n 'FOR', // (R)\n 'FORCE', // (R)\n 'FOREIGN', // (R)\n 'FROM', // (R)\n 'FULLTEXT', // (R)\n 'FUNCTION', // (R)\n 'GENERATED', // (R)\n 'GET', // (R)\n 'GRANT', // (R)\n 'GROUP', // (R)\n 'GROUPING', // (R)\n 'GROUPS', // (R)\n 'HAVING', // (R)\n 'HIGH_PRIORITY', // (R)\n 'HOUR_MICROSECOND', // (R)\n 'HOUR_MINUTE', // (R)\n 'HOUR_SECOND', // (R)\n 'IF', // (R)\n 'IGNORE', // (R)\n 'IN', // (R)\n 'INDEX', // (R)\n 'INFILE', // (R)\n 'INNER', // (R)\n 'INOUT', // (R)\n 'INSENSITIVE', // (R)\n 'INSERT', // (R)\n 'IN', // <-- moved over from functions\n 'INTERSECT', // (R)\n 'INTERVAL', // (R)\n 'INTO', // (R)\n 'IO_AFTER_GTIDS', // (R)\n 'IO_BEFORE_GTIDS', // (R)\n 'IS', // (R)\n 'ITERATE', // (R)\n 'JOIN', // (R)\n 'JSON_TABLE', // (R)\n 'KEY', // (R)\n 'KEYS', // (R)\n 'KILL', // (R)\n 'LAG', // (R)\n 'LAST_VALUE', // (R)\n 'LATERAL', // (R)\n 'LEAD', // (R)\n 'LEADING', // (R)\n 'LEAVE', // (R)\n 'LEFT', // (R)\n 'LIKE', // (R)\n 'LIMIT', // (R)\n 'LINEAR', // (R)\n 'LINES', // (R)\n 'LOAD', // (R)\n 'LOCALTIME', // (R)\n 'LOCALTIMESTAMP', // (R)\n 'LOCK', // (R)\n 'LONG', // (R)\n 'LOOP', // (R)\n 'LOW_PRIORITY', // (R)\n 'MASTER_BIND', // (R)\n 'MASTER_SSL_VERIFY_SERVER_CERT', // (R)\n 'MATCH', // (R)\n 'MAXVALUE', // (R)\n 'MINUTE_MICROSECOND', // (R)\n 'MINUTE_SECOND', // (R)\n 'MOD', // (R)\n 'MODIFIES', // (R)\n 'NATURAL', // (R)\n 'NOT', // (R)\n 'NO_WRITE_TO_BINLOG', // (R)\n 'NTH_VALUE', // (R)\n 'NTILE', // (R)\n 'NULL', // (R)\n 'OF', // (R)\n 'ON', // (R)\n 'OPTIMIZE', // (R)\n 'OPTIMIZER_COSTS', // (R)\n 'OPTION', // (R)\n 'OPTIONALLY', // (R)\n 'OR', // (R)\n 'ORDER', // (R)\n 'OUT', // (R)\n 'OUTER', // (R)\n 'OUTFILE', // (R)\n 'OVER', // (R)\n 'PARTITION', // (R)\n 'PERCENT_RANK', // (R)\n 'PRIMARY', // (R)\n 'PROCEDURE', // (R)\n 'PURGE', // (R)\n 'RANGE', // (R)\n 'RANK', // (R)\n 'READ', // (R)\n 'READS', // (R)\n 'READ_WRITE', // (R)\n 'RECURSIVE', // (R)\n 'REFERENCES', // (R)\n 'REGEXP', // (R)\n 'RELEASE', // (R)\n 'RENAME', // (R)\n 'REPEAT', // (R)\n 'REPLACE', // (R)\n 'REQUIRE', // (R)\n 'RESIGNAL', // (R)\n 'RESTRICT', // (R)\n 'RETURN', // (R)\n 'REVOKE', // (R)\n 'RIGHT', // (R)\n 'RLIKE', // (R)\n 'ROW', // (R)\n 'ROWS', // (R)\n 'ROW_NUMBER', // (R)\n 'SCHEMA', // (R)\n 'SCHEMAS', // (R)\n 'SECOND_MICROSECOND', // (R)\n 'SELECT', // (R)\n 'SENSITIVE', // (R)\n 'SEPARATOR', // (R)\n 'SET', // (R)\n 'SHOW', // (R)\n 'SIGNAL', // (R)\n 'SPATIAL', // (R)\n 'SPECIFIC', // (R)\n 'SQL', // (R)\n 'SQLEXCEPTION', // (R)\n 'SQLSTATE', // (R)\n 'SQLWARNING', // (R)\n 'SQL_BIG_RESULT', // (R)\n 'SQL_CALC_FOUND_ROWS', // (R)\n 'SQL_SMALL_RESULT', // (R)\n 'SSL', // (R)\n 'STARTING', // (R)\n 'STORED', // (R)\n 'STRAIGHT_JOIN', // (R)\n 'SYSTEM', // (R)\n 'TABLE', // (R)\n 'TERMINATED', // (R)\n 'THEN', // (R)\n 'TO', // (R)\n 'TRAILING', // (R)\n 'TRIGGER', // (R)\n 'TRUE', // (R)\n 'UNDO', // (R)\n 'UNION', // (R)\n 'UNIQUE', // (R)\n 'UNLOCK', // (R)\n 'UNSIGNED', // (R)\n 'UPDATE', // (R)\n 'USAGE', // (R)\n 'USE', // (R)\n 'USING', // (R)\n 'UTC_DATE', // (R)\n 'UTC_TIME', // (R)\n 'UTC_TIMESTAMP', // (R)\n 'VALUES', // (R)\n 'VIRTUAL', // (R)\n 'WHEN', // (R)\n 'WHERE', // (R)\n 'WHILE', // (R)\n 'WINDOW', // (R)\n 'WITH', // (R)\n 'WRITE', // (R)\n 'XOR', // (R)\n 'YEAR_MONTH', // (R)\n 'ZEROFILL', // (R)\n];\n\nexport const dataTypes: string[] = [\n // https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n 'BIGINT', // (R)\n 'BINARY', // (R)\n 'BIT',\n 'BLOB', // (R)\n 'BOOL', // (R)\n 'BOOLEAN', // (R)\n 'CHAR', // (R)\n 'CHARACTER', // (R)\n 'DATE', // (R)\n 'DATETIME', // (R)\n 'DEC', // (R)\n 'DECIMAL', // (R)\n 'DOUBLE PRECISION',\n 'DOUBLE', // (R)\n 'ENUM',\n 'FIXED',\n 'FLOAT', // (R)\n 'FLOAT4', // (R)\n 'FLOAT8', // (R)\n 'INT', // (R)\n 'INT1', // (R)\n 'INT2', // (R)\n 'INT3', // (R)\n 'INT4', // (R)\n 'INT8', // (R)\n 'INTEGER', // (R)\n 'LONGBLOB', // (R)\n 'LONGTEXT', // (R)\n 'MEDIUMBLOB', // (R)\n 'MEDIUMINT', // (R)\n 'MEDIUMTEXT', // (R)\n 'MIDDLEINT', // (R)\n 'NATIONAL CHAR', // (R)\n 'NATIONAL VARCHAR', // (R)\n 'NUMERIC', // (R)\n 'PRECISION', // (R)\n 'REAL', // (R)\n 'SMALLINT', // (R)\n 'TEXT',\n 'TIME',\n 'TIMESTAMP', // (R)\n 'TINYBLOB', // (R)\n 'TINYINT', // (R)\n 'TINYTEXT', // (R)\n 'VARBINARY', // (R)\n 'VARCHAR', // (R)\n 'VARCHARACTER', // (R)\n 'VARYING', // (R)\n 'YEAR',\n // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n // https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n // 'AND',\n 'ANY_VALUE',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BENCHMARK',\n 'BIN',\n 'BIN_TO_UUID',\n 'BINARY',\n 'BIT_AND',\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAN_ACCESS_COLUMN',\n 'CAN_ACCESS_DATABASE',\n 'CAN_ACCESS_TABLE',\n 'CAN_ACCESS_USER',\n 'CAN_ACCESS_VIEW',\n 'CAST',\n 'CEIL',\n 'CEILING',\n 'CHAR',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHARSET',\n 'COALESCE',\n 'COERCIBILITY',\n 'COLLATION',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'COUNT',\n 'CRC32',\n 'CUME_DIST',\n 'CURDATE',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURTIME',\n 'DATABASE',\n 'DATE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATEDIFF',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DEFAULT',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV',\n 'ELT',\n 'EXP',\n 'EXPORT_SET',\n 'EXTRACT',\n 'EXTRACTVALUE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FIRST_VALUE',\n 'FLOOR',\n 'FORMAT',\n 'FORMAT_BYTES',\n 'FORMAT_PICO_TIME',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GEOMCOLLECTION',\n 'GEOMETRYCOLLECTION',\n 'GET_DD_COLUMN_PRIVILEGES',\n 'GET_DD_CREATE_OPTIONS',\n 'GET_DD_INDEX_SUB_PART_LENGTH',\n 'GET_FORMAT',\n 'GET_LOCK',\n 'GREATEST',\n 'GROUP_CONCAT',\n 'GROUPING',\n 'GTID_SUBSET',\n 'GTID_SUBTRACT',\n 'HEX',\n 'HOUR',\n 'ICU_VERSION',\n 'IF',\n 'IFNULL',\n // 'IN',\n 'INET_ATON',\n 'INET_NTOA',\n 'INET6_ATON',\n 'INET6_NTOA',\n 'INSERT',\n 'INSTR',\n 'INTERNAL_AUTO_INCREMENT',\n 'INTERNAL_AVG_ROW_LENGTH',\n 'INTERNAL_CHECK_TIME',\n 'INTERNAL_CHECKSUM',\n 'INTERNAL_DATA_FREE',\n 'INTERNAL_DATA_LENGTH',\n 'INTERNAL_DD_CHAR_LENGTH',\n 'INTERNAL_GET_COMMENT_OR_ERROR',\n 'INTERNAL_GET_ENABLED_ROLE_JSON',\n 'INTERNAL_GET_HOSTNAME',\n 'INTERNAL_GET_USERNAME',\n 'INTERNAL_GET_VIEW_WARNING_OR_ERROR',\n 'INTERNAL_INDEX_COLUMN_CARDINALITY',\n 'INTERNAL_INDEX_LENGTH',\n 'INTERNAL_IS_ENABLED_ROLE',\n 'INTERNAL_IS_MANDATORY_ROLE',\n 'INTERNAL_KEYS_DISABLED',\n 'INTERNAL_MAX_DATA_LENGTH',\n 'INTERNAL_TABLE_ROWS',\n 'INTERNAL_UPDATE_TIME',\n 'INTERVAL',\n 'IS',\n 'IS_FREE_LOCK',\n 'IS_IPV4',\n 'IS_IPV4_COMPAT',\n 'IS_IPV4_MAPPED',\n 'IS_IPV6',\n 'IS NOT',\n 'IS NOT NULL',\n 'IS NULL',\n 'IS_USED_LOCK',\n 'IS_UUID',\n 'ISNULL',\n 'JSON_ARRAY',\n 'JSON_ARRAY_APPEND',\n 'JSON_ARRAY_INSERT',\n 'JSON_ARRAYAGG',\n 'JSON_CONTAINS',\n 'JSON_CONTAINS_PATH',\n 'JSON_DEPTH',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_MERGE',\n 'JSON_MERGE_PATCH',\n 'JSON_MERGE_PRESERVE',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_OVERLAPS',\n 'JSON_PRETTY',\n 'JSON_QUOTE',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SCHEMA_VALID',\n 'JSON_SCHEMA_VALIDATION_REPORT',\n 'JSON_SEARCH',\n 'JSON_SET',\n 'JSON_STORAGE_FREE',\n 'JSON_STORAGE_SIZE',\n 'JSON_TABLE',\n 'JSON_TYPE',\n 'JSON_UNQUOTE',\n 'JSON_VALID',\n 'JSON_VALUE',\n 'LAG',\n 'LAST_DAY',\n 'LAST_INSERT_ID',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LIKE',\n 'LINESTRING',\n 'LN',\n 'LOAD_FILE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAKE_SET',\n 'MAKEDATE',\n 'MAKETIME',\n 'MASTER_POS_WAIT',\n 'MATCH',\n 'MAX',\n 'MBRCONTAINS',\n 'MBRCOVEREDBY',\n 'MBRCOVERS',\n 'MBRDISJOINT',\n 'MBREQUALS',\n 'MBRINTERSECTS',\n 'MBROVERLAPS',\n 'MBRTOUCHES',\n 'MBRWITHIN',\n 'MD5',\n 'MEMBER OF',\n 'MICROSECOND',\n 'MID',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MULTILINESTRING',\n 'MULTIPOINT',\n 'MULTIPOLYGON',\n 'NAME_CONST',\n 'NOT',\n 'NOT IN',\n 'NOT LIKE',\n 'NOT REGEXP',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'OCT',\n 'OCTET_LENGTH',\n // 'OR',\n 'ORD',\n 'PERCENT_RANK',\n 'PERIOD_ADD',\n 'PERIOD_DIFF',\n 'PI',\n 'POINT',\n 'POLYGON',\n 'POSITION',\n 'POW',\n 'POWER',\n 'PS_CURRENT_THREAD_ID',\n 'PS_THREAD_ID',\n 'QUARTER',\n 'QUOTE',\n 'RADIANS',\n 'RAND',\n 'RANDOM_BYTES',\n 'RANK',\n 'REGEXP',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'RELEASE_ALL_LOCKS',\n 'RELEASE_LOCK',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROLES_GRAPHML',\n 'ROUND',\n 'ROW_COUNT',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SCHEMA',\n 'SEC_TO_TIME',\n 'SECOND',\n 'SESSION_USER',\n 'SHA1',\n 'SHA2',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SOUNDEX',\n 'SOUNDS LIKE',\n 'SOURCE_POS_WAIT',\n 'SPACE',\n 'SQRT',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASGEOJSON',\n 'ST_ASTEXT',\n 'ST_BUFFER',\n 'ST_BUFFER_STRATEGY',\n 'ST_CENTROID',\n 'ST_COLLECT',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_CROSSES',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DISTANCE_SPHERE',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_EQUALS',\n 'ST_EXTERIORRING',\n 'ST_FRECHETDISTANCE',\n 'ST_GEOHASH',\n 'ST_GEOMCOLLFROMTEXT',\n 'ST_GEOMCOLLFROMWKB',\n 'ST_GEOMETRYN',\n 'ST_GEOMETRYTYPE',\n 'ST_GEOMFROMGEOJSON',\n 'ST_GEOMFROMTEXT',\n 'ST_GEOMFROMWKB',\n 'ST_HAUSDORFFDISTANCE',\n 'ST_INTERIORRINGN',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_ISCLOSED',\n 'ST_ISEMPTY',\n 'ST_ISSIMPLE',\n 'ST_ISVALID',\n 'ST_LATFROMGEOHASH',\n 'ST_LATITUDE',\n 'ST_LENGTH',\n 'ST_LINEFROMTEXT',\n 'ST_LINEFROMWKB',\n 'ST_LINEINTERPOLATEPOINT',\n 'ST_LINEINTERPOLATEPOINTS',\n 'ST_LONGFROMGEOHASH',\n 'ST_LONGITUDE',\n 'ST_MAKEENVELOPE',\n 'ST_MLINEFROMTEXT',\n 'ST_MLINEFROMWKB',\n 'ST_MPOINTFROMTEXT',\n 'ST_MPOINTFROMWKB',\n 'ST_MPOLYFROMTEXT',\n 'ST_MPOLYFROMWKB',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMINTERIORRING',\n 'ST_NUMPOINTS',\n 'ST_OVERLAPS',\n 'ST_POINTATDISTANCE',\n 'ST_POINTFROMGEOHASH',\n 'ST_POINTFROMTEXT',\n 'ST_POINTFROMWKB',\n 'ST_POINTN',\n 'ST_POLYFROMTEXT',\n 'ST_POLYFROMWKB',\n 'ST_SIMPLIFY',\n 'ST_SRID',\n 'ST_STARTPOINT',\n 'ST_SWAPXY',\n 'ST_SYMDIFFERENCE',\n 'ST_TOUCHES',\n 'ST_TRANSFORM',\n 'ST_UNION',\n 'ST_VALIDATE',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_Y',\n 'STATEMENT_DIGEST',\n 'STATEMENT_DIGEST_TEXT',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'STRCMP',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'SUBTIME',\n 'SUM',\n 'SYSDATE',\n 'SYSTEM_USER',\n 'TAN',\n 'TIME',\n 'TIME_FORMAT',\n 'TIME_TO_SEC',\n 'TIMEDIFF',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TO_BASE64',\n 'TO_DAYS',\n 'TO_SECONDS',\n 'TRIM',\n 'TRUNCATE',\n 'UCASE',\n 'UNCOMPRESS',\n 'UNCOMPRESSED_LENGTH',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n // 'USER',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'UUID',\n 'UUID_SHORT',\n 'UUID_TO_BIN',\n 'VALIDATE_PASSWORD_STRENGTH',\n 'VALUES',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'VERSION',\n 'WAIT_FOR_EXECUTED_GTID_SET',\n 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',\n 'WEEK',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WEIGHT_STRING',\n // 'XOR',\n 'YEAR',\n 'YEARWEEK',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './mysql.keywords.js';\nimport { functions } from './mysql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n 'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n 'VALUES',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE [LOW_PRIORITY] [IGNORE]',\n // - delete:\n 'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n '{CHANGE | MODIFY} [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [TO | AS]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html\n 'ALTER DATABASE',\n 'ALTER EVENT',\n 'ALTER FUNCTION',\n 'ALTER INSTANCE',\n 'ALTER LOGFILE GROUP',\n 'ALTER PROCEDURE',\n 'ALTER RESOURCE GROUP',\n 'ALTER SERVER',\n 'ALTER TABLESPACE',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE TABLE',\n 'BINLOG',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE MASTER TO',\n 'CHANGE REPLICATION FILTER',\n 'CHANGE REPLICATION SOURCE TO',\n 'CHECK TABLE',\n 'CHECKSUM TABLE',\n 'CLONE',\n 'COMMIT',\n 'CREATE DATABASE',\n 'CREATE EVENT',\n 'CREATE FUNCTION',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE LOGFILE GROUP',\n 'CREATE PROCEDURE',\n 'CREATE RESOURCE GROUP',\n 'CREATE ROLE',\n 'CREATE SERVER',\n 'CREATE SPATIAL REFERENCE SYSTEM',\n 'CREATE TABLESPACE',\n 'CREATE TRIGGER',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DROP DATABASE',\n 'DROP EVENT',\n 'DROP FUNCTION',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP LOGFILE GROUP',\n 'DROP PROCEDURE',\n 'DROP RESOURCE GROUP',\n 'DROP ROLE',\n 'DROP SERVER',\n 'DROP SPATIAL REFERENCE SYSTEM',\n 'DROP TABLESPACE',\n 'DROP TRIGGER',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'IMPORT TABLE',\n 'INSTALL COMPONENT',\n 'INSTALL PLUGIN',\n 'KILL',\n 'LOAD DATA',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML',\n 'LOCK INSTANCE FOR BACKUP',\n 'LOCK TABLES',\n 'MASTER_POS_WAIT',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'RELEASE SAVEPOINT',\n 'RENAME TABLE',\n 'RENAME USER',\n 'REPAIR TABLE',\n 'RESET',\n 'RESET MASTER',\n 'RESET PERSIST',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESTART',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET RESOURCE GROUP',\n 'SET ROLE',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW BINARY LOGS',\n 'SHOW BINLOG EVENTS',\n 'SHOW CHARACTER SET',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE EVENT',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE TRIGGER',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW EVENTS',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PLUGINS',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA STATUS',\n 'SHOW REPLICAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW STATUS',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW TRIGGERS',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHUTDOWN',\n 'SOURCE_POS_WAIT',\n 'START GROUP_REPLICATION',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP GROUP_REPLICATION',\n 'STOP REPLICA',\n 'STOP SLAVE',\n 'TABLE',\n 'UNINSTALL COMPONENT',\n 'UNINSTALL PLUGIN',\n 'UNLOCK INSTANCE',\n 'UNLOCK TABLES',\n 'USE',\n 'XA',\n // flow control\n // 'IF',\n 'ITERATE',\n 'LEAVE',\n 'LOOP',\n 'REPEAT',\n 'RETURN',\n 'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL]',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n 'IDENTIFIED BY',\n]);\n\n// https://dev.mysql.com/doc/refman/8.0/en/\nexport const mysql: DialectOptions = {\n name: 'mysql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n stringTypes: [\n '\"\"-qq-bs',\n { quote: \"''-qq-bs\", prefixes: ['N'] },\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_.$]+' },\n { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n paramTypes: { positional: true },\n lineCommentTypes: ['--', '#'],\n operators: [\n '%',\n ':=',\n '&',\n '|',\n '^',\n '~',\n '<<',\n '>>',\n '<=>',\n '->',\n '->>',\n '&&',\n '||',\n '!',\n '*.*', // Not actually an operator\n ],\n postProcess,\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const keywords: string[] = [\n // https://docs.pingcap.com/tidb/stable/keywords\n 'ADD', // (R)\n 'ALL', // (R)\n 'ALTER', // (R)\n 'ANALYZE', // (R)\n 'AND', // (R)\n 'ARRAY', // (R)\n 'AS', // (R)\n 'ASC', // (R)\n 'BETWEEN', // (R)\n 'BOTH', // (R)\n 'BY', // (R)\n 'CALL', // (R)\n 'CASCADE', // (R)\n 'CASE', // (R)\n 'CHANGE', // (R)\n 'CHECK', // (R)\n 'COLLATE', // (R)\n 'COLUMN', // (R)\n 'CONSTRAINT', // (R)\n 'CONTINUE', // (R)\n 'CONVERT', // (R)\n 'CREATE', // (R)\n 'CROSS', // (R)\n 'CURRENT_DATE', // (R)\n 'CURRENT_ROLE', // (R)\n 'CURRENT_TIME', // (R)\n 'CURRENT_TIMESTAMP', // (R)\n 'CURRENT_USER', // (R)\n 'CURSOR', // (R)\n 'DATABASE', // (R)\n 'DATABASES', // (R)\n 'DAY_HOUR', // (R)\n 'DAY_MICROSECOND', // (R)\n 'DAY_MINUTE', // (R)\n 'DAY_SECOND', // (R)\n 'DEFAULT', // (R)\n 'DELAYED', // (R)\n 'DELETE', // (R)\n 'DESC', // (R)\n 'DESCRIBE', // (R)\n 'DISTINCT', // (R)\n 'DISTINCTROW', // (R)\n 'DIV', // (R)\n 'DOUBLE', // (R)\n 'DROP', // (R)\n 'DUAL', // (R)\n 'ELSE', // (R)\n 'ELSEIF', // (R)\n 'ENCLOSED', // (R)\n 'ESCAPED', // (R)\n 'EXCEPT', // (R)\n 'EXISTS', // (R)\n 'EXIT', // (R)\n 'EXPLAIN', // (R)\n 'FALSE', // (R)\n 'FETCH', // (R)\n 'FOR', // (R)\n 'FORCE', // (R)\n 'FOREIGN', // (R)\n 'FROM', // (R)\n 'FULLTEXT', // (R)\n 'GENERATED', // (R)\n 'GRANT', // (R)\n 'GROUP', // (R)\n 'GROUPS', // (R)\n 'HAVING', // (R)\n 'HIGH_PRIORITY', // (R)\n 'HOUR_MICROSECOND', // (R)\n 'HOUR_MINUTE', // (R)\n 'HOUR_SECOND', // (R)\n 'IF', // (R)\n 'IGNORE', // (R)\n 'ILIKE', // (R)\n 'IN', // (R)\n 'INDEX', // (R)\n 'INFILE', // (R)\n 'INNER', // (R)\n 'INOUT', // (R)\n 'INSERT', // (R)\n 'INTERSECT', // (R)\n 'INTERVAL', // (R)\n 'INTO', // (R)\n 'IS', // (R)\n 'ITERATE', // (R)\n 'JOIN', // (R)\n 'KEY', // (R)\n 'KEYS', // (R)\n 'KILL', // (R)\n 'LEADING', // (R)\n 'LEAVE', // (R)\n 'LEFT', // (R)\n 'LIKE', // (R)\n 'LIMIT', // (R)\n 'LINEAR', // (R)\n 'LINES', // (R)\n 'LOAD', // (R)\n 'LOCALTIME', // (R)\n 'LOCALTIMESTAMP', // (R)\n 'LOCK', // (R)\n 'LONG', // (R)\n 'LOW_PRIORITY', // (R)\n 'MATCH', // (R)\n 'MAXVALUE', // (R)\n 'MINUTE_MICROSECOND', // (R)\n 'MINUTE_SECOND', // (R)\n 'MOD', // (R)\n 'NATURAL', // (R)\n 'NOT', // (R)\n 'NO_WRITE_TO_BINLOG', // (R)\n 'NULL', // (R)\n 'OF', // (R)\n 'ON', // (R)\n 'OPTIMIZE', // (R)\n 'OPTION', // (R)\n 'OPTIONALLY', // (R)\n 'OR', // (R)\n 'ORDER', // (R)\n 'OUT', // (R)\n 'OUTER', // (R)\n 'OUTFILE', // (R)\n 'OVER', // (R)\n 'PARTITION', // (R)\n 'PRIMARY', // (R)\n 'PROCEDURE', // (R)\n 'RANGE', // (R)\n 'READ', // (R)\n 'RECURSIVE', // (R)\n 'REFERENCES', // (R)\n 'REGEXP', // (R)\n 'RELEASE', // (R)\n 'RENAME', // (R)\n 'REPEAT', // (R)\n 'REPLACE', // (R)\n 'REQUIRE', // (R)\n 'RESTRICT', // (R)\n 'REVOKE', // (R)\n 'RIGHT', // (R)\n 'RLIKE', // (R)\n 'ROW', // (R)\n 'ROWS', // (R)\n 'SECOND_MICROSECOND', // (R)\n 'SELECT', // (R)\n 'SET', // (R)\n 'SHOW', // (R)\n 'SPATIAL', // (R)\n 'SQL', // (R)\n 'SQLEXCEPTION', // (R)\n 'SQLSTATE', // (R)\n 'SQLWARNING', // (R)\n 'SQL_BIG_RESULT', // (R)\n 'SQL_CALC_FOUND_ROWS', // (R)\n 'SQL_SMALL_RESULT', // (R)\n 'SSL', // (R)\n 'STARTING', // (R)\n 'STATS_EXTENDED', // (R)\n 'STORED', // (R)\n 'STRAIGHT_JOIN', // (R)\n 'TABLE', // (R)\n 'TABLESAMPLE', // (R)\n 'TERMINATED', // (R)\n 'THEN', // (R)\n 'TO', // (R)\n 'TRAILING', // (R)\n 'TRIGGER', // (R)\n 'TRUE', // (R)\n 'TiDB_CURRENT_TSO', // (R)\n 'UNION', // (R)\n 'UNIQUE', // (R)\n 'UNLOCK', // (R)\n 'UNSIGNED', // (R)\n 'UNTIL', // (R)\n 'UPDATE', // (R)\n 'USAGE', // (R)\n 'USE', // (R)\n 'USING', // (R)\n 'UTC_DATE', // (R)\n 'UTC_TIME', // (R)\n 'UTC_TIMESTAMP', // (R)\n 'VALUES', // (R)\n 'VIRTUAL', // (R)\n 'WHEN', // (R)\n 'WHERE', // (R)\n 'WHILE', // (R)\n 'WINDOW', // (R)\n 'WITH', // (R)\n 'WRITE', // (R)\n 'XOR', // (R)\n 'YEAR_MONTH', // (R)\n 'ZEROFILL', // (R)\n];\n\nexport const dataTypes: string[] = [\n // https://docs.pingcap.com/tidb/stable/data-type-overview\n 'BIGINT', // (R)\n 'BINARY', // (R)\n 'BIT',\n 'BLOB', // (R)\n 'BOOL', // (R)\n 'BOOLEAN', // (R)\n 'CHAR', // (R)\n 'CHARACTER', // (R)\n 'DATE', // (R)\n 'DATETIME', // (R)\n 'DEC', // (R)\n 'DECIMAL', // (R)\n 'DOUBLE PRECISION',\n 'DOUBLE', // (R)\n 'ENUM',\n 'FIXED',\n 'INT', // (R)\n 'INT1', // (R)\n 'INT2', // (R)\n 'INT3', // (R)\n 'INT4', // (R)\n 'INT8', // (R)\n 'INTEGER', // (R)\n 'LONGBLOB', // (R)\n 'LONGTEXT', // (R)\n 'MEDIUMBLOB', // (R)\n 'MEDIUMINT', // (R)\n 'MIDDLEINT', // (R)\n 'NATIONAL CHAR', // (R)\n 'NATIONAL VARCHAR', // (R)\n 'NUMERIC', // (R)\n 'PRECISION', // (R)\n 'SMALLINT', // (R)\n 'TEXT',\n 'TIME',\n 'TIMESTAMP', // (R)\n 'TINYBLOB', // (R)\n 'TINYINT', // (R)\n 'TINYTEXT', // (R)\n 'VARBINARY', // (R)\n 'VARCHAR', // (R)\n 'VARCHARACTER', // (R)\n 'VARYING', // (R)\n 'YEAR',\n // 'SET' // handled as special-case in postProcess\n];\n","export const functions: string[] = [\n // https://docs.pingcap.com/tidb/stable/sql-statement-show-builtins\n // https://docs.pingcap.com/tidb/stable/functions-and-operators-overview\n // + MySQL aggregate functions: https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html\n // + MySQL window functions: https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n // 'AND',\n 'ANY_VALUE',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BENCHMARK',\n 'BIN',\n 'BIN_TO_UUID',\n 'BIT_AND',\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'BIT_OR',\n 'BIT_XOR',\n 'BITAND',\n 'BITNEG',\n 'BITOR',\n 'BITXOR',\n 'CASE',\n 'CAST',\n 'CEIL',\n 'CEILING',\n 'CHAR_FUNC',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHARSET',\n 'COALESCE',\n 'COERCIBILITY',\n 'COLLATION',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'COUNT',\n 'CRC32',\n 'CUME_DIST',\n 'CURDATE',\n 'CURRENT_DATE',\n 'CURRENT_RESOURCE_GROUP',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURTIME',\n 'DATABASE',\n 'DATE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATEDIFF',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DECODE',\n 'DEFAULT_FUNC',\n 'DEGREES',\n 'DENSE_RANK',\n 'DES_DECRYPT',\n 'DES_ENCRYPT',\n 'DIV',\n 'ELT',\n 'ENCODE',\n 'ENCRYPT',\n 'EQ',\n 'EXP',\n 'EXPORT_SET',\n 'EXTRACT',\n 'FIELD',\n 'FIND_IN_SET',\n 'FIRST_VALUE',\n 'FLOOR',\n 'FORMAT',\n 'FORMAT_BYTES',\n 'FORMAT_NANO_TIME',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GE',\n 'GET_FORMAT',\n 'GET_LOCK',\n 'GETPARAM',\n 'GREATEST',\n 'GROUP_CONCAT',\n 'GROUPING',\n 'GT',\n 'HEX',\n 'HOUR',\n 'IF',\n 'IFNULL',\n 'ILIKE',\n // 'IN',\n 'INET6_ATON',\n 'INET6_NTOA',\n 'INET_ATON',\n 'INET_NTOA',\n 'INSERT_FUNC',\n 'INSTR',\n 'INTDIV',\n 'INTERVAL',\n 'IS_FREE_LOCK',\n 'IS_IPV4',\n 'IS_IPV4_COMPAT',\n 'IS_IPV4_MAPPED',\n 'IS_IPV6',\n 'IS_USED_LOCK',\n 'IS_UUID',\n 'ISFALSE',\n 'ISNULL',\n 'ISTRUE',\n 'JSON_ARRAY',\n 'JSON_ARRAYAGG',\n 'JSON_ARRAY_APPEND',\n 'JSON_ARRAY_INSERT',\n 'JSON_CONTAINS',\n 'JSON_CONTAINS_PATH',\n 'JSON_DEPTH',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_MEMBEROF',\n 'JSON_MERGE',\n 'JSON_MERGE_PATCH',\n 'JSON_MERGE_PRESERVE',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_OVERLAPS',\n 'JSON_PRETTY',\n 'JSON_QUOTE',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SEARCH',\n 'JSON_SET',\n 'JSON_STORAGE_FREE',\n 'JSON_STORAGE_SIZE',\n 'JSON_TYPE',\n 'JSON_UNQUOTE',\n 'JSON_VALID',\n 'LAG',\n 'LAST_DAY',\n 'LAST_INSERT_ID',\n 'LAST_VALUE',\n 'LASTVAL',\n 'LCASE',\n 'LE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LEFTSHIFT',\n 'LENGTH',\n 'LIKE',\n 'LN',\n 'LOAD_FILE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LT',\n 'LTRIM',\n 'MAKE_SET',\n 'MAKEDATE',\n 'MAKETIME',\n 'MASTER_POS_WAIT',\n 'MAX',\n 'MD5',\n 'MICROSECOND',\n 'MID',\n 'MIN',\n 'MINUS',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MUL',\n 'NAME_CONST',\n 'NE',\n 'NEXTVAL',\n 'NOT',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLEQ',\n 'OCT',\n 'OCTET_LENGTH',\n 'OLD_PASSWORD',\n // 'OR',\n 'ORD',\n 'PASSWORD_FUNC',\n 'PERCENT_RANK',\n 'PERIOD_ADD',\n 'PERIOD_DIFF',\n 'PI',\n 'PLUS',\n 'POSITION',\n 'POW',\n 'POWER',\n 'QUARTER',\n 'QUOTE',\n 'RADIANS',\n 'RAND',\n 'RANDOM_BYTES',\n 'RANK',\n 'REGEXP',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'RELEASE_ALL_LOCKS',\n 'RELEASE_LOCK',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RIGHTSHIFT',\n 'ROUND',\n 'ROW_COUNT',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SCHEMA',\n 'SEC_TO_TIME',\n 'SECOND',\n 'SESSION_USER',\n 'SETVAL',\n 'SETVAR',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SM3',\n 'SPACE',\n 'SQRT',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'STRCMP',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'SUBTIME',\n 'SUM',\n 'SYSDATE',\n 'SYSTEM_USER',\n 'TAN',\n 'TIDB_BOUNDED_STALENESS',\n 'TIDB_CURRENT_TSO',\n 'TIDB_DECODE_BINARY_PLAN',\n 'TIDB_DECODE_KEY',\n 'TIDB_DECODE_PLAN',\n 'TIDB_DECODE_SQL_DIGESTS',\n 'TIDB_ENCODE_SQL_DIGEST',\n 'TIDB_IS_DDL_OWNER',\n 'TIDB_PARSE_TSO',\n 'TIDB_PARSE_TSO_LOGICAL',\n 'TIDB_ROW_CHECKSUM',\n 'TIDB_SHARD',\n 'TIDB_VERSION',\n 'TIME',\n 'TIME_FORMAT',\n 'TIME_TO_SEC',\n 'TIMEDIFF',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TO_BASE64',\n 'TO_DAYS',\n 'TO_SECONDS',\n 'TRANSLATE',\n 'TRIM',\n 'TRUNCATE',\n 'UCASE',\n 'UNARYMINUS',\n 'UNCOMPRESS',\n 'UNCOMPRESSED_LENGTH',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPPER',\n // 'USER',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'UUID',\n 'UUID_SHORT',\n 'UUID_TO_BIN',\n 'VALIDATE_PASSWORD_STRENGTH',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'VERSION',\n 'VITESS_HASH',\n 'WEEK',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WEIGHT_STRING',\n // 'XOR',\n 'YEAR',\n 'YEARWEEK',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './tidb.keywords.js';\nimport { functions } from './tidb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n 'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n 'VALUES',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n // https://docs.pingcap.com/tidb/stable/sql-statement-create-view\n 'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n // https://docs.pingcap.com/tidb/stable/sql-statement-update\n 'UPDATE [LOW_PRIORITY] [IGNORE]',\n // https://docs.pingcap.com/tidb/stable/sql-statement-delete\n 'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n // https://docs.pingcap.com/tidb/stable/sql-statement-drop-table\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // https://docs.pingcap.com/tidb/stable/sql-statement-alter-table\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n '{CHANGE | MODIFY} [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [TO | AS]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n // https://docs.pingcap.com/tidb/stable/sql-statement-truncate\n 'TRUNCATE [TABLE]',\n // https://docs.pingcap.com/tidb/stable/sql-statement-alter-database\n 'ALTER DATABASE',\n // https://docs.pingcap.com/tidb/stable/sql-statement-alter-instance\n 'ALTER INSTANCE',\n 'ALTER RESOURCE GROUP',\n 'ALTER SEQUENCE',\n // https://docs.pingcap.com/tidb/stable/sql-statement-alter-user\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE TABLE',\n 'CHECK TABLE',\n 'CHECKSUM TABLE',\n 'COMMIT',\n 'CREATE DATABASE',\n 'CREATE INDEX',\n 'CREATE RESOURCE GROUP',\n 'CREATE ROLE',\n 'CREATE SEQUENCE',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DROP DATABASE',\n 'DROP INDEX',\n 'DROP RESOURCE GROUP',\n 'DROP ROLE',\n 'DROP TABLESPACE',\n 'DROP USER',\n 'DROP VIEW',\n 'EXPLAIN',\n 'FLUSH',\n // https://docs.pingcap.com/tidb/stable/sql-statement-grant-privileges\n 'GRANT',\n 'IMPORT TABLE',\n 'INSTALL COMPONENT',\n 'INSTALL PLUGIN',\n 'KILL',\n 'LOAD DATA',\n 'LOCK INSTANCE FOR BACKUP',\n 'LOCK TABLES',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'RELEASE SAVEPOINT',\n 'RENAME TABLE',\n 'RENAME USER',\n 'REPAIR TABLE',\n 'RESET',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET RESOURCE GROUP',\n 'SET ROLE',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW BINARY LOGS',\n 'SHOW BINLOG EVENTS',\n 'SHOW CHARACTER SET',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW EVENTS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PLUGINS',\n 'SHOW PRIVILEGES',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW STATUS',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW TRIGGERS',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n // https://docs.pingcap.com/tidb/stable/sql-statement-table\n 'TABLE',\n 'UNINSTALL COMPONENT',\n 'UNINSTALL PLUGIN',\n 'UNLOCK INSTANCE',\n 'UNLOCK TABLES',\n // https://docs.pingcap.com/tidb/stable/sql-statement-use\n 'USE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL]',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n 'IDENTIFIED BY',\n]);\n\n// https://docs.pingcap.com/tidb/stable/basic-features\nexport const tidb: DialectOptions = {\n name: 'tidb',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n stringTypes: [\n '\"\"-qq-bs',\n { quote: \"''-qq-bs\", prefixes: ['N'] },\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_.$]+' },\n { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n paramTypes: { positional: true },\n lineCommentTypes: ['--', '#'],\n operators: [\n '%',\n ':=',\n '&',\n '|',\n '^',\n '~',\n '<<',\n '>>',\n '<=>',\n '->',\n '->>',\n '&&',\n '||',\n '!',\n '*.*', // Not actually an operator\n ],\n postProcess,\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html\n 'ABORT',\n 'ABS',\n 'ACOS',\n 'ADVISOR',\n 'ARRAY_AGG',\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_AVG',\n 'ARRAY_BINARY_SEARCH',\n 'ARRAY_CONCAT',\n 'ARRAY_CONTAINS',\n 'ARRAY_COUNT',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_FLATTEN',\n 'ARRAY_IFNULL',\n 'ARRAY_INSERT',\n 'ARRAY_INTERSECT',\n 'ARRAY_LENGTH',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_MOVE',\n 'ARRAY_POSITION',\n 'ARRAY_PREPEND',\n 'ARRAY_PUT',\n 'ARRAY_RANGE',\n 'ARRAY_REMOVE',\n 'ARRAY_REPEAT',\n 'ARRAY_REPLACE',\n 'ARRAY_REVERSE',\n 'ARRAY_SORT',\n 'ARRAY_STAR',\n 'ARRAY_SUM',\n 'ARRAY_SYMDIFF',\n 'ARRAY_SYMDIFF1',\n 'ARRAY_SYMDIFFN',\n 'ARRAY_UNION',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BASE64',\n 'BASE64_DECODE',\n 'BASE64_ENCODE',\n 'BITAND ',\n 'BITCLEAR ',\n 'BITNOT ',\n 'BITOR ',\n 'BITSET ',\n 'BITSHIFT ',\n 'BITTEST ',\n 'BITXOR ',\n 'CEIL',\n 'CLOCK_LOCAL',\n 'CLOCK_MILLIS',\n 'CLOCK_STR',\n 'CLOCK_TZ',\n 'CLOCK_UTC',\n 'COALESCE',\n 'CONCAT',\n 'CONCAT2',\n 'CONTAINS',\n 'CONTAINS_TOKEN',\n 'CONTAINS_TOKEN_LIKE',\n 'CONTAINS_TOKEN_REGEXP',\n 'COS',\n 'COUNT',\n 'COUNT',\n 'COUNTN',\n 'CUME_DIST',\n 'CURL',\n 'DATE_ADD_MILLIS',\n 'DATE_ADD_STR',\n 'DATE_DIFF_MILLIS',\n 'DATE_DIFF_STR',\n 'DATE_FORMAT_STR',\n 'DATE_PART_MILLIS',\n 'DATE_PART_STR',\n 'DATE_RANGE_MILLIS',\n 'DATE_RANGE_STR',\n 'DATE_TRUNC_MILLIS',\n 'DATE_TRUNC_STR',\n 'DECODE',\n 'DECODE_JSON',\n 'DEGREES',\n 'DENSE_RANK',\n 'DURATION_TO_STR',\n // 'E',\n 'ENCODED_SIZE',\n 'ENCODE_JSON',\n 'EXP',\n 'FIRST_VALUE',\n 'FLOOR',\n 'GREATEST',\n 'HAS_TOKEN',\n 'IFINF',\n 'IFMISSING',\n 'IFMISSINGORNULL',\n 'IFNAN',\n 'IFNANORINF',\n 'IFNULL',\n 'INITCAP',\n 'ISARRAY',\n 'ISATOM',\n 'ISBITSET',\n 'ISBOOLEAN',\n 'ISNUMBER',\n 'ISOBJECT',\n 'ISSTRING',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'LEAST',\n 'LENGTH',\n 'LN',\n 'LOG',\n 'LOWER',\n 'LTRIM',\n 'MAX',\n 'MEAN',\n 'MEDIAN',\n 'META',\n 'MILLIS',\n 'MILLIS_TO_LOCAL',\n 'MILLIS_TO_STR',\n 'MILLIS_TO_TZ',\n 'MILLIS_TO_UTC',\n 'MILLIS_TO_ZONE_NAME',\n 'MIN',\n 'MISSINGIF',\n 'NANIF',\n 'NEGINFIF',\n 'NOW_LOCAL',\n 'NOW_MILLIS',\n 'NOW_STR',\n 'NOW_TZ',\n 'NOW_UTC',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NVL',\n 'NVL2',\n 'OBJECT_ADD',\n 'OBJECT_CONCAT',\n 'OBJECT_INNER_PAIRS',\n 'OBJECT_INNER_VALUES',\n 'OBJECT_LENGTH',\n 'OBJECT_NAMES',\n 'OBJECT_PAIRS',\n 'OBJECT_PUT',\n 'OBJECT_REMOVE',\n 'OBJECT_RENAME',\n 'OBJECT_REPLACE',\n 'OBJECT_UNWRAP',\n 'OBJECT_VALUES',\n 'PAIRS',\n 'PERCENT_RANK',\n 'PI',\n 'POLY_LENGTH',\n 'POSINFIF',\n 'POSITION',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'REGEXP_CONTAINS',\n 'REGEXP_LIKE',\n 'REGEXP_MATCHES',\n 'REGEXP_POSITION',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT',\n 'REGEX_CONTAINS',\n 'REGEX_LIKE',\n 'REGEX_MATCHES',\n 'REGEX_POSITION',\n 'REGEX_REPLACE',\n 'REGEX_SPLIT',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'ROUND',\n 'ROW_NUMBER',\n 'RTRIM',\n 'SEARCH',\n 'SEARCH_META',\n 'SEARCH_SCORE',\n 'SIGN',\n 'SIN',\n 'SPLIT',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DURATION',\n 'STR_TO_MILLIS',\n 'STR_TO_TZ',\n 'STR_TO_UTC',\n 'STR_TO_ZONE_NAME',\n 'SUBSTR',\n 'SUFFIXES',\n 'SUM',\n 'TAN',\n 'TITLE',\n 'TOARRAY',\n 'TOATOM',\n 'TOBOOLEAN',\n 'TOKENS',\n 'TOKENS',\n 'TONUMBER',\n 'TOOBJECT',\n 'TOSTRING',\n 'TRIM',\n 'TRUNC',\n // 'TYPE', // disabled\n 'UPPER',\n 'UUID',\n 'VARIANCE',\n 'VARIANCE_POP',\n 'VARIANCE_SAMP',\n 'VAR_POP',\n 'VAR_SAMP',\n 'WEEKDAY_MILLIS',\n 'WEEKDAY_STR',\n // type casting\n // not implemented in N1QL, but added here now for the sake of tests\n // https://docs.couchbase.com/server/current/analytics/3_query.html#Vs_SQL-92\n 'CAST',\n];\n","export const keywords: string[] = [\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n 'ADVISE',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AT',\n 'BEGIN',\n 'BETWEEN',\n 'BINARY',\n 'BOOLEAN',\n 'BREAK',\n 'BUCKET',\n 'BUILD',\n 'BY',\n 'CALL',\n 'CASE',\n 'CAST',\n 'CLUSTER',\n 'COLLATE',\n 'COLLECTION',\n 'COMMIT',\n 'COMMITTED',\n 'CONNECT',\n 'CONTINUE',\n 'CORRELATED',\n 'COVER',\n 'CREATE',\n 'CURRENT',\n 'DATABASE',\n 'DATASET',\n 'DATASTORE',\n 'DECLARE',\n 'DECREMENT',\n 'DELETE',\n 'DERIVED',\n 'DESC',\n 'DESCRIBE',\n 'DISTINCT',\n 'DO',\n 'DROP',\n 'EACH',\n 'ELEMENT',\n 'ELSE',\n 'END',\n 'EVERY',\n 'EXCEPT',\n 'EXCLUDE',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FILTER',\n 'FIRST',\n 'FLATTEN',\n 'FLUSH',\n 'FOLLOWING',\n 'FOR',\n 'FORCE',\n 'FROM',\n 'FTS',\n 'FUNCTION',\n 'GOLANG',\n 'GRANT',\n 'GROUP',\n 'GROUPS',\n 'GSI',\n 'HASH',\n 'HAVING',\n 'IF',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INCLUDE',\n 'INCREMENT',\n 'INDEX',\n 'INFER',\n 'INLINE',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISOLATION',\n 'JAVASCRIPT',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KEYSPACE',\n 'KNOWN',\n 'LANGUAGE',\n 'LAST',\n 'LEFT',\n 'LET',\n 'LETTING',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LSM',\n 'MAP',\n 'MAPPING',\n 'MATCHED',\n 'MATERIALIZED',\n 'MERGE',\n 'MINUS',\n 'MISSING',\n 'NAMESPACE',\n 'NEST',\n 'NL',\n 'NO',\n 'NOT',\n 'NTH_VALUE',\n 'NULL',\n 'NULLS',\n 'NUMBER',\n 'OBJECT',\n 'OFFSET',\n 'ON',\n 'OPTION',\n 'OPTIONS',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OVER',\n 'PARSE',\n 'PARTITION',\n 'PASSWORD',\n 'PATH',\n 'POOL',\n 'PRECEDING',\n 'PREPARE',\n 'PRIMARY',\n 'PRIVATE',\n 'PRIVILEGE',\n 'PROBE',\n 'PROCEDURE',\n 'PUBLIC',\n 'RANGE',\n 'RAW',\n 'REALM',\n 'REDUCE',\n 'RENAME',\n 'RESPECT',\n 'RETURN',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLLBACK',\n 'ROW',\n 'ROWS',\n 'SATISFIES',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCOPE',\n 'SELECT',\n 'SELF',\n 'SEMI',\n 'SET',\n 'SHOW',\n 'SOME',\n 'START',\n 'STATISTICS',\n 'STRING',\n 'SYSTEM',\n 'THEN',\n 'TIES',\n 'TO',\n 'TRAN',\n 'TRANSACTION',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'UNBOUNDED',\n 'UNDER',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UNSET',\n 'UPDATE',\n 'UPSERT',\n 'USE',\n 'USER',\n 'USING',\n 'VALIDATE',\n 'VALUE',\n 'VALUED',\n 'VALUES',\n 'VIA',\n 'VIEW',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WORK',\n 'XOR',\n];\n\nexport const dataTypes: string[] = [\n // N1QL does not support any way of declaring types for columns.\n // It does not support the CREATE TABLE statement nor the CAST() expression.\n //\n // It does have several keywords like ARRAY and OBJECT, which seem to refer to types,\n // but they are used as operators. It also reserves several words like STRING and NUMBER,\n // which it actually doesn't use.\n //\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datatypes.html\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './n1ql.functions.js';\nimport { dataTypes, keywords } from './n1ql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED THEN',\n 'UPDATE SET',\n 'INSERT',\n // other\n 'NEST',\n 'UNNEST',\n 'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - set schema:\n 'SET SCHEMA',\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n 'ADVISE',\n 'ALTER INDEX',\n 'BEGIN TRANSACTION',\n 'BUILD INDEX',\n 'COMMIT TRANSACTION',\n 'CREATE COLLECTION',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE PRIMARY INDEX',\n 'CREATE SCOPE',\n 'DROP COLLECTION',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP PRIMARY INDEX',\n 'DROP SCOPE',\n 'EXECUTE',\n 'EXECUTE FUNCTION',\n 'EXPLAIN',\n 'GRANT',\n 'INFER',\n 'PREPARE',\n 'REVOKE',\n 'ROLLBACK TRANSACTION',\n 'SAVEPOINT',\n 'SET TRANSACTION',\n 'UPDATE STATISTICS',\n 'UPSERT',\n // other\n 'LET',\n 'SET CURRENT SCHEMA',\n 'SHOW',\n 'USE [PRIMARY] KEYS',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT} [OUTER] JOIN', 'INNER JOIN']);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE | GROUPS} BETWEEN']);\n\n// For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html\nexport const n1ql: DialectOptions = {\n name: 'n1ql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // NOTE: single quotes are actually not supported in N1QL,\n // but we support them anyway as all other SQL dialects do,\n // which simplifies writing tests that are shared between all dialects.\n stringTypes: ['\"\"-bs', \"''-bs\"],\n identTypes: ['``'],\n extraParens: ['[]', '{}'],\n paramTypes: { positional: true, numbered: ['$'], named: ['$'] },\n lineCommentTypes: ['#', '--'],\n operators: ['%', '==', ':', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","export const keywords: string[] = [\n // https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/reservewords.htm\n // 'A',\n 'ADD',\n 'AGENT',\n 'AGGREGATE',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'ARROW',\n 'AS',\n 'ASC',\n 'AT',\n 'ATTRIBUTE',\n 'AUTHID',\n 'AVG',\n 'BEGIN',\n 'BETWEEN',\n 'BLOCK',\n 'BODY',\n 'BOTH',\n 'BOUND',\n 'BULK',\n 'BY',\n 'BYTE',\n // 'C',\n 'CALL',\n 'CALLING',\n 'CASCADE',\n 'CASE',\n 'CHARSET',\n 'CHARSETFORM',\n 'CHARSETID',\n 'CHECK',\n 'CLOSE',\n 'CLUSTER',\n 'CLUSTERS',\n 'COLAUTH',\n 'COLLECT',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMMITTED',\n 'COMPILED',\n 'COMPRESS',\n 'CONNECT',\n 'CONSTANT',\n 'CONSTRUCTOR',\n 'CONTEXT',\n 'CONVERT',\n 'COUNT',\n 'CRASH',\n 'CREATE',\n 'CURRENT',\n 'CURSOR',\n 'CUSTOMDATUM',\n 'DANGLING',\n 'DATA',\n 'DAY',\n 'DECLARE',\n 'DEFAULT',\n 'DEFINE',\n 'DELETE',\n 'DESC',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DROP',\n 'DURATION',\n 'ELEMENT',\n 'ELSE',\n 'ELSIF',\n 'EMPTY',\n 'END',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCEPTIONS',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTERNAL',\n 'FETCH',\n 'FINAL',\n 'FIXED',\n 'FOR',\n 'FORALL',\n 'FORCE',\n 'FORM',\n 'FROM',\n 'FUNCTION',\n 'GENERAL',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HASH',\n 'HAVING',\n 'HEAP',\n 'HIDDEN',\n 'HOUR',\n 'IDENTIFIED',\n 'IF',\n 'IMMEDIATE',\n 'IN',\n 'INCLUDING',\n 'INDEX',\n 'INDEXES',\n 'INDICATOR',\n 'INDICES',\n 'INFINITE',\n 'INSERT',\n 'INSTANTIABLE',\n 'INTERFACE',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'INVALIDATE',\n 'IS',\n 'ISOLATION',\n 'JAVA',\n 'LANGUAGE',\n 'LARGE',\n 'LEADING',\n 'LENGTH',\n 'LEVEL',\n 'LIBRARY',\n 'LIKE',\n 'LIKE2',\n 'LIKE4',\n 'LIKEC',\n 'LIMIT',\n 'LIMITED',\n 'LOCAL',\n 'LOCK',\n 'LOOP',\n 'MAP',\n 'MAX',\n 'MAXLEN',\n 'MEMBER',\n 'MERGE',\n 'MIN',\n 'MINUS',\n 'MINUTE',\n 'MOD',\n 'MODE',\n 'MODIFY',\n 'MONTH',\n 'MULTISET',\n 'NAME',\n 'NAN',\n 'NATIONAL',\n 'NATIVE',\n 'NEW',\n 'NOCOMPRESS',\n 'NOCOPY',\n 'NOT',\n 'NOWAIT',\n 'NULL',\n 'OBJECT',\n 'OCICOLL',\n 'OCIDATE',\n 'OCIDATETIME',\n 'OCIDURATION',\n 'OCIINTERVAL',\n 'OCILOBLOCATOR',\n 'OCINUMBER',\n 'OCIRAW',\n 'OCIREF',\n 'OCIREFCURSOR',\n 'OCIROWID',\n 'OCISTRING',\n 'OCITYPE',\n 'OF',\n 'ON',\n 'ONLY',\n 'OPAQUE',\n 'OPEN',\n 'OPERATOR',\n 'OPTION',\n 'OR',\n 'ORACLE',\n 'ORADATA',\n 'ORDER',\n 'OVERLAPS',\n 'ORGANIZATION',\n 'ORLANY',\n 'ORLVARY',\n 'OTHERS',\n 'OUT',\n 'OVERRIDING',\n 'PACKAGE',\n 'PARALLEL_ENABLE',\n 'PARAMETER',\n 'PARAMETERS',\n 'PARTITION',\n 'PASCAL',\n 'PIPE',\n 'PIPELINED',\n 'PRAGMA',\n 'PRIOR',\n 'PRIVATE',\n 'PROCEDURE',\n 'PUBLIC',\n 'RAISE',\n 'RANGE',\n 'READ',\n 'RECORD',\n 'REF',\n 'REFERENCE',\n 'REM',\n 'REMAINDER',\n 'RENAME',\n 'RESOURCE',\n 'RESULT',\n 'RETURN',\n 'RETURNING',\n 'REVERSE',\n 'REVOKE',\n 'ROLLBACK',\n 'ROW',\n 'SAMPLE',\n 'SAVE',\n 'SAVEPOINT',\n 'SB1',\n 'SB2',\n 'SB4',\n 'SECOND',\n 'SEGMENT',\n 'SELECT',\n 'SELF',\n 'SEPARATE',\n 'SEQUENCE',\n 'SERIALIZABLE',\n 'SET',\n 'SHARE',\n 'SHORT',\n 'SIZE',\n 'SIZE_T',\n 'SOME',\n 'SPARSE',\n 'SQL',\n 'SQLCODE',\n 'SQLDATA',\n 'SQLNAME',\n 'SQLSTATE',\n 'STANDARD',\n 'START',\n 'STATIC',\n 'STDDEV',\n 'STORED',\n 'STRING',\n 'STRUCT',\n 'STYLE',\n 'SUBMULTISET',\n 'SUBPARTITION',\n 'SUBSTITUTABLE',\n 'SUBTYPE',\n 'SUM',\n 'SYNONYM',\n 'TABAUTH',\n 'TABLE',\n 'TDO',\n 'THE',\n 'THEN',\n 'TIME',\n 'TIMEZONE_ABBR',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TIMEZONE_REGION',\n 'TO',\n 'TRAILING',\n 'TRANSAC',\n 'TRANSACTIONAL',\n 'TRUSTED',\n 'TYPE',\n 'UB1',\n 'UB2',\n 'UB4',\n 'UNDER',\n 'UNION',\n 'UNIQUE',\n 'UNSIGNED',\n 'UNTRUSTED',\n 'UPDATE',\n 'USE',\n 'USING',\n 'VALIST',\n 'VALUE',\n 'VALUES',\n 'VARIABLE',\n 'VARIANCE',\n 'VARRAY',\n 'VIEW',\n 'VIEWS',\n 'VOID',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WORK',\n 'WRAPPED',\n 'WRITE',\n 'YEAR',\n 'ZONE',\n];\n\nexport const dataTypes: string[] = [\n // https://www.ibm.com/docs/en/db2/10.5?topic=plsql-data-types\n 'ARRAY',\n 'BFILE_BASE',\n 'BINARY',\n 'BLOB_BASE',\n 'CHAR VARYING',\n 'CHAR_BASE',\n 'CHAR',\n 'CHARACTER VARYING',\n 'CHARACTER',\n 'CLOB_BASE',\n 'DATE_BASE',\n 'DATE',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTERVAL DAY',\n 'INTERVAL YEAR',\n 'LONG',\n 'NATIONAL CHAR VARYING',\n 'NATIONAL CHAR',\n 'NATIONAL CHARACTER VARYING',\n 'NATIONAL CHARACTER',\n 'NCHAR VARYING',\n 'NCHAR',\n 'NCHAR',\n 'NUMBER_BASE',\n 'NUMBER',\n 'NUMBERIC',\n 'NVARCHAR',\n 'PRECISION',\n 'RAW',\n 'TIMESTAMP',\n 'UROWID',\n 'VARCHAR',\n 'VARCHAR2',\n];\n","export const functions: string[] = [\n // https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm\n // numeric\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'BITAND',\n 'CEIL',\n 'COS',\n 'COSH',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'MOD',\n 'NANVL',\n 'POWER',\n 'REMAINDER',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n 'TRUNC',\n 'WIDTH_BUCKET',\n\n // character\n 'CHR',\n 'CONCAT',\n 'INITCAP',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'NLS_INITCAP',\n 'NLS_LOWER',\n 'NLSSORT',\n 'NLS_UPPER',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPLACE',\n 'RPAD',\n 'RTRIM',\n 'SOUNDEX',\n 'SUBSTR',\n 'TRANSLATE',\n 'TREAT',\n 'TRIM',\n 'UPPER',\n\n 'NLS_CHARSET_DECL_LEN',\n 'NLS_CHARSET_ID',\n 'NLS_CHARSET_NAME',\n\n 'ASCII',\n 'INSTR',\n 'LENGTH',\n 'REGEXP_INSTR',\n\n // datetime\n 'ADD_MONTHS',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'DBTIMEZONE',\n 'EXTRACT',\n 'FROM_TZ',\n 'LAST_DAY',\n 'LOCALTIMESTAMP',\n 'MONTHS_BETWEEN',\n 'NEW_TIME',\n 'NEXT_DAY',\n 'NUMTODSINTERVAL',\n 'NUMTOYMINTERVAL',\n 'ROUND',\n 'SESSIONTIMEZONE',\n 'SYS_EXTRACT_UTC',\n 'SYSDATE',\n 'SYSTIMESTAMP',\n 'TO_CHAR',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_TZ',\n 'TO_DSINTERVAL',\n 'TO_YMINTERVAL',\n 'TRUNC',\n 'TZ_OFFSET',\n\n // comparison\n 'GREATEST',\n 'LEAST',\n\n // conversion\n 'ASCIISTR',\n 'BIN_TO_NUM',\n 'CAST',\n 'CHARTOROWID',\n 'COMPOSE',\n 'CONVERT',\n 'DECOMPOSE',\n 'HEXTORAW',\n 'NUMTODSINTERVAL',\n 'NUMTOYMINTERVAL',\n 'RAWTOHEX',\n 'RAWTONHEX',\n 'ROWIDTOCHAR',\n 'ROWIDTONCHAR',\n 'SCN_TO_TIMESTAMP',\n 'TIMESTAMP_TO_SCN',\n 'TO_BINARY_DOUBLE',\n 'TO_BINARY_FLOAT',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_DSINTERVAL',\n 'TO_LOB',\n 'TO_MULTI_BYTE',\n 'TO_NCHAR',\n 'TO_NCLOB',\n 'TO_NUMBER',\n 'TO_DSINTERVAL',\n 'TO_SINGLE_BYTE',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_TZ',\n 'TO_YMINTERVAL',\n 'TO_YMINTERVAL',\n 'TRANSLATE',\n 'UNISTR',\n\n // largeObject\n 'BFILENAME',\n 'EMPTY_BLOB,',\n 'EMPTY_CLOB',\n\n // collection\n 'CARDINALITY',\n 'COLLECT',\n 'POWERMULTISET',\n 'POWERMULTISET_BY_CARDINALITY',\n 'SET',\n\n // hierarchical\n 'SYS_CONNECT_BY_PATH',\n\n // dataMining\n 'CLUSTER_ID',\n 'CLUSTER_PROBABILITY',\n 'CLUSTER_SET',\n 'FEATURE_ID',\n 'FEATURE_SET',\n 'FEATURE_VALUE',\n 'PREDICTION',\n 'PREDICTION_COST',\n 'PREDICTION_DETAILS',\n 'PREDICTION_PROBABILITY',\n 'PREDICTION_SET',\n\n // xml\n 'APPENDCHILDXML',\n 'DELETEXML',\n 'DEPTH',\n 'EXTRACT',\n 'EXISTSNODE',\n 'EXTRACTVALUE',\n 'INSERTCHILDXML',\n 'INSERTXMLBEFORE',\n 'PATH',\n 'SYS_DBURIGEN',\n 'SYS_XMLAGG',\n 'SYS_XMLGEN',\n 'UPDATEXML',\n 'XMLAGG',\n 'XMLCDATA',\n 'XMLCOLATTVAL',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLFOREST',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLQUERY',\n 'XMLROOT',\n 'XMLSEQUENCE',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XMLTRANSFORM',\n\n // encoding\n 'DECODE',\n 'DUMP',\n 'ORA_HASH',\n 'VSIZE',\n\n // nullRelated\n 'COALESCE',\n 'LNNVL',\n 'NULLIF',\n 'NVL',\n 'NVL2',\n\n // env\n 'SYS_CONTEXT',\n 'SYS_GUID',\n 'SYS_TYPEID',\n 'UID',\n 'USER',\n 'USERENV',\n\n // aggregate\n 'AVG',\n 'COLLECT',\n 'CORR',\n 'CORR_S',\n 'CORR_K',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST',\n 'GROUP_ID',\n 'GROUPING',\n 'GROUPING_ID',\n 'LAST',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'RANK',\n 'REGR_SLOPE',\n 'REGR_INTERCEPT',\n 'REGR_COUNT',\n 'REGR_R2',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_SXX',\n 'REGR_SYY',\n 'REGR_SXY',\n 'STATS_BINOMIAL_TEST',\n 'STATS_CROSSTAB',\n 'STATS_F_TEST',\n 'STATS_KS_TEST',\n 'STATS_MODE',\n 'STATS_MW_TEST',\n 'STATS_ONE_WAY_ANOVA',\n 'STATS_T_TEST_ONE',\n 'STATS_T_TEST_PAIRED',\n 'STATS_T_TEST_INDEP',\n 'STATS_T_TEST_INDEPU',\n 'STATS_WSR_TEST',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n\n // Windowing functions (minus the ones already listed in aggregates)\n // window\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTILE',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n\n // objectReference\n 'DEREF',\n 'MAKE_REF',\n 'REF',\n 'REFTOHEX',\n 'VALUE',\n\n // model\n 'CV',\n 'ITERATION_NUMBER',\n 'PRESENTNNV',\n 'PRESENTV',\n 'PREVIOUS',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isReserved, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { dataTypes, keywords } from './plsql.keywords.js';\nimport { functions } from './plsql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | UNIQUE]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER [SIBLINGS] BY',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR UPDATE [OF]',\n // Data manipulation\n // - insert:\n 'INSERT [INTO | ALL INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n // other\n 'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW',\n 'CREATE MATERIALIZED VIEW',\n // - update:\n 'UPDATE [ONLY]',\n // - delete:\n 'DELETE FROM [ONLY]',\n // - drop table:\n 'DROP TABLE',\n // - alter table:\n 'ALTER TABLE',\n 'ADD',\n 'DROP {COLUMN | UNUSED COLUMNS | COLUMNS CONTINUE}',\n 'MODIFY',\n 'RENAME TO',\n 'RENAME COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'SET SCHEMA',\n 'BEGIN',\n 'CONNECT BY',\n 'DECLARE',\n 'EXCEPT',\n 'EXCEPTION',\n 'LOOP',\n 'START WITH',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'MINUS', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n // non-standard joins\n '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL]',\n 'ON COMMIT',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const plsql: DialectOptions = {\n name: 'plsql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['N'] },\n { quote: \"q''\", prefixes: ['N'] },\n ],\n // PL/SQL doesn't actually support escaping of quotes in identifiers,\n // but for the sake of simpler testing we'll support this anyway\n // as all other SQL dialects with \"identifiers\" do.\n identTypes: [`\"\"-qq`],\n identChars: { rest: '$#' },\n variableTypes: [{ regex: '&{1,2}[A-Za-z][A-Za-z0-9_$#]*' }],\n paramTypes: { numbered: [':'], named: [':'] },\n operators: [\n '**',\n ':=',\n '%',\n '~=',\n '^=',\n // '..', // Conflicts with float followed by dot (so \"2..3\" gets parsed as [\"2.\", \".\", \"3\"])\n '>>',\n '<<',\n '=>',\n '@',\n '||',\n ],\n postProcess,\n },\n formatOptions: {\n alwaysDenseOperators: ['@'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]) {\n let previousReservedToken: Token = EOF_TOKEN;\n\n return tokens.map(token => {\n // BY [SET]\n if (isToken.SET(token) && isToken.BY(previousReservedToken)) {\n return { ...token, type: TokenType.RESERVED_KEYWORD };\n }\n\n if (isReserved(token.type)) {\n previousReservedToken = token;\n }\n\n return token;\n });\n}\n","export const functions: string[] = [\n // https://www.postgresql.org/docs/14/functions.html\n //\n // https://www.postgresql.org/docs/14/functions-math.html\n 'ABS',\n 'ACOS',\n 'ACOSD',\n 'ACOSH',\n 'ASIN',\n 'ASIND',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATAN2D',\n 'ATAND',\n 'ATANH',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'COS',\n 'COSD',\n 'COSH',\n 'COT',\n 'COTD',\n 'DEGREES',\n 'DIV',\n 'EXP',\n 'FACTORIAL',\n 'FLOOR',\n 'GCD',\n 'LCM',\n 'LN',\n 'LOG',\n 'LOG10',\n 'MIN_SCALE',\n 'MOD',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'ROUND',\n 'SCALE',\n 'SETSEED',\n 'SIGN',\n 'SIN',\n 'SIND',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TAND',\n 'TANH',\n 'TRIM_SCALE',\n 'TRUNC',\n 'WIDTH_BUCKET',\n\n // https://www.postgresql.org/docs/14/functions-string.html\n 'ABS',\n 'ASCII',\n 'BIT_LENGTH',\n 'BTRIM',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'FORMAT',\n 'INITCAP',\n 'LEFT',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MD5',\n 'NORMALIZE',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PARSE_IDENT',\n 'PG_CLIENT_ENCODING',\n 'POSITION',\n 'QUOTE_IDENT',\n 'QUOTE_LITERAL',\n 'QUOTE_NULLABLE',\n 'REGEXP_MATCH',\n 'REGEXP_MATCHES',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT_TO_ARRAY',\n 'REGEXP_SPLIT_TO_TABLE',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SPLIT_PART',\n 'SPRINTF',\n 'STARTS_WITH',\n 'STRING_AGG',\n 'STRING_TO_ARRAY',\n 'STRING_TO_TABLE',\n 'STRPOS',\n 'SUBSTR',\n 'SUBSTRING',\n 'TO_ASCII',\n 'TO_HEX',\n 'TRANSLATE',\n 'TRIM',\n 'UNISTR',\n 'UPPER',\n\n // https://www.postgresql.org/docs/14/functions-binarystring.html\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'BTRIM',\n 'CONVERT',\n 'CONVERT_FROM',\n 'CONVERT_TO',\n 'DECODE',\n 'ENCODE',\n 'GET_BIT',\n 'GET_BYTE',\n 'LENGTH',\n 'LTRIM',\n 'MD5',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'POSITION',\n 'RTRIM',\n 'SET_BIT',\n 'SET_BYTE',\n 'SHA224',\n 'SHA256',\n 'SHA384',\n 'SHA512',\n 'STRING_AGG',\n 'SUBSTR',\n 'SUBSTRING',\n 'TRIM',\n\n // https://www.postgresql.org/docs/14/functions-bitstring.html\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'GET_BIT',\n 'LENGTH',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'POSITION',\n 'SET_BIT',\n 'SUBSTRING',\n\n // https://www.postgresql.org/docs/14/functions-matching.html\n 'REGEXP_MATCH',\n 'REGEXP_MATCHES',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT_TO_ARRAY',\n 'REGEXP_SPLIT_TO_TABLE',\n\n // https://www.postgresql.org/docs/14/functions-formatting.html\n 'TO_CHAR',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TO_TIMESTAMP',\n\n // https://www.postgresql.org/docs/14/functions-datetime.html\n // 'AGE',\n 'CLOCK_TIMESTAMP',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE_BIN',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'EXTRACT',\n 'ISFINITE',\n 'JUSTIFY_DAYS',\n 'JUSTIFY_HOURS',\n 'JUSTIFY_INTERVAL',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'MAKE_DATE',\n 'MAKE_INTERVAL',\n 'MAKE_TIME',\n 'MAKE_TIMESTAMP',\n 'MAKE_TIMESTAMPTZ',\n 'NOW',\n 'PG_SLEEP',\n 'PG_SLEEP_FOR',\n 'PG_SLEEP_UNTIL',\n 'STATEMENT_TIMESTAMP',\n 'TIMEOFDAY',\n 'TO_TIMESTAMP',\n 'TRANSACTION_TIMESTAMP',\n\n // https://www.postgresql.org/docs/14/functions-enum.html\n 'ENUM_FIRST',\n 'ENUM_LAST',\n 'ENUM_RANGE',\n\n // https://www.postgresql.org/docs/14/functions-geometry.html\n 'AREA',\n 'BOUND_BOX',\n 'BOX',\n 'CENTER',\n 'CIRCLE',\n 'DIAGONAL',\n 'DIAMETER',\n 'HEIGHT',\n 'ISCLOSED',\n 'ISOPEN',\n 'LENGTH',\n 'LINE',\n 'LSEG',\n 'NPOINTS',\n 'PATH',\n 'PCLOSE',\n 'POINT',\n 'POLYGON',\n 'POPEN',\n 'RADIUS',\n 'SLOPE',\n 'WIDTH',\n\n // https://www.postgresql.org/docs/14/functions-net.html\n 'ABBREV',\n 'BROADCAST',\n 'FAMILY',\n 'HOST',\n 'HOSTMASK',\n 'INET_MERGE',\n 'INET_SAME_FAMILY',\n 'MACADDR8_SET7BIT',\n 'MASKLEN',\n 'NETMASK',\n 'NETWORK',\n 'SET_MASKLEN',\n // 'TEXT', // excluded because it's also a data type name\n 'TRUNC',\n\n // https://www.postgresql.org/docs/14/functions-textsearch.html\n 'ARRAY_TO_TSVECTOR',\n 'GET_CURRENT_TS_CONFIG',\n 'JSONB_TO_TSVECTOR',\n 'JSON_TO_TSVECTOR',\n 'LENGTH',\n 'NUMNODE',\n 'PHRASETO_TSQUERY',\n 'PLAINTO_TSQUERY',\n 'QUERYTREE',\n 'SETWEIGHT',\n 'STRIP',\n 'TO_TSQUERY',\n 'TO_TSVECTOR',\n 'TSQUERY_PHRASE',\n 'TSVECTOR_TO_ARRAY',\n 'TS_DEBUG',\n 'TS_DELETE',\n 'TS_FILTER',\n 'TS_HEADLINE',\n 'TS_LEXIZE',\n 'TS_PARSE',\n 'TS_RANK',\n 'TS_RANK_CD',\n 'TS_REWRITE',\n 'TS_STAT',\n 'TS_TOKEN_TYPE',\n 'WEBSEARCH_TO_TSQUERY',\n\n // https://www.postgresql.org/docs/14/functions-uuid.html\n 'UUID',\n\n // https://www.postgresql.org/docs/14/functions-xml.html\n 'CURSOR_TO_XML',\n 'CURSOR_TO_XMLSCHEMA',\n 'DATABASE_TO_XML',\n 'DATABASE_TO_XMLSCHEMA',\n 'DATABASE_TO_XML_AND_XMLSCHEMA',\n 'NEXTVAL',\n 'QUERY_TO_XML',\n 'QUERY_TO_XMLSCHEMA',\n 'QUERY_TO_XML_AND_XMLSCHEMA',\n 'SCHEMA_TO_XML',\n 'SCHEMA_TO_XMLSCHEMA',\n 'SCHEMA_TO_XML_AND_XMLSCHEMA',\n 'STRING',\n 'TABLE_TO_XML',\n 'TABLE_TO_XMLSCHEMA',\n 'TABLE_TO_XML_AND_XMLSCHEMA',\n 'XMLAGG',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLELEMENT',\n 'XMLEXISTS',\n 'XMLFOREST',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROOT',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XML_IS_WELL_FORMED',\n 'XML_IS_WELL_FORMED_CONTENT',\n 'XML_IS_WELL_FORMED_DOCUMENT',\n 'XPATH',\n 'XPATH_EXISTS',\n\n // https://www.postgresql.org/docs/14/functions-json.html\n 'ARRAY_TO_JSON',\n 'JSONB_AGG',\n 'JSONB_ARRAY_ELEMENTS',\n 'JSONB_ARRAY_ELEMENTS_TEXT',\n 'JSONB_ARRAY_LENGTH',\n 'JSONB_BUILD_ARRAY',\n 'JSONB_BUILD_OBJECT',\n 'JSONB_EACH',\n 'JSONB_EACH_TEXT',\n 'JSONB_EXTRACT_PATH',\n 'JSONB_EXTRACT_PATH_TEXT',\n 'JSONB_INSERT',\n 'JSONB_OBJECT',\n 'JSONB_OBJECT_AGG',\n 'JSONB_OBJECT_KEYS',\n 'JSONB_PATH_EXISTS',\n 'JSONB_PATH_EXISTS_TZ',\n 'JSONB_PATH_MATCH',\n 'JSONB_PATH_MATCH_TZ',\n 'JSONB_PATH_QUERY',\n 'JSONB_PATH_QUERY_ARRAY',\n 'JSONB_PATH_QUERY_ARRAY_TZ',\n 'JSONB_PATH_QUERY_FIRST',\n 'JSONB_PATH_QUERY_FIRST_TZ',\n 'JSONB_PATH_QUERY_TZ',\n 'JSONB_POPULATE_RECORD',\n 'JSONB_POPULATE_RECORDSET',\n 'JSONB_PRETTY',\n 'JSONB_SET',\n 'JSONB_SET_LAX',\n 'JSONB_STRIP_NULLS',\n 'JSONB_TO_RECORD',\n 'JSONB_TO_RECORDSET',\n 'JSONB_TYPEOF',\n 'JSON_AGG',\n 'JSON_ARRAY_ELEMENTS',\n 'JSON_ARRAY_ELEMENTS_TEXT',\n 'JSON_ARRAY_LENGTH',\n 'JSON_BUILD_ARRAY',\n 'JSON_BUILD_OBJECT',\n 'JSON_EACH',\n 'JSON_EACH_TEXT',\n 'JSON_EXTRACT_PATH',\n 'JSON_EXTRACT_PATH_TEXT',\n 'JSON_OBJECT',\n 'JSON_OBJECT_AGG',\n 'JSON_OBJECT_KEYS',\n 'JSON_POPULATE_RECORD',\n 'JSON_POPULATE_RECORDSET',\n 'JSON_STRIP_NULLS',\n 'JSON_TO_RECORD',\n 'JSON_TO_RECORDSET',\n 'JSON_TYPEOF',\n 'ROW_TO_JSON',\n 'TO_JSON',\n 'TO_JSONB',\n 'TO_TIMESTAMP',\n\n // https://www.postgresql.org/docs/14/functions-sequence.html\n 'CURRVAL',\n 'LASTVAL',\n 'NEXTVAL',\n 'SETVAL',\n\n // https://www.postgresql.org/docs/14/functions-conditional.html\n // 'CASE',\n 'COALESCE',\n 'GREATEST',\n 'LEAST',\n 'NULLIF',\n\n // https://www.postgresql.org/docs/14/functions-array.html\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_CAT',\n 'ARRAY_DIMS',\n 'ARRAY_FILL',\n 'ARRAY_LENGTH',\n 'ARRAY_LOWER',\n 'ARRAY_NDIMS',\n 'ARRAY_POSITION',\n 'ARRAY_POSITIONS',\n 'ARRAY_PREPEND',\n 'ARRAY_REMOVE',\n 'ARRAY_REPLACE',\n 'ARRAY_TO_STRING',\n 'ARRAY_UPPER',\n 'CARDINALITY',\n 'STRING_TO_ARRAY',\n 'TRIM_ARRAY',\n 'UNNEST',\n\n // https://www.postgresql.org/docs/14/functions-range.html\n 'ISEMPTY',\n 'LOWER',\n 'LOWER_INC',\n 'LOWER_INF',\n 'MULTIRANGE',\n 'RANGE_MERGE',\n 'UPPER',\n 'UPPER_INC',\n 'UPPER_INF',\n\n // https://www.postgresql.org/docs/14/functions-aggregate.html\n // 'ANY',\n 'ARRAY_AGG',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'BOOL_AND',\n 'BOOL_OR',\n 'COALESCE',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'EVERY',\n 'GROUPING',\n 'JSONB_AGG',\n 'JSONB_OBJECT_AGG',\n 'JSON_AGG',\n 'JSON_OBJECT_AGG',\n 'MAX',\n 'MIN',\n 'MODE',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'RANGE_AGG',\n 'RANGE_INTERSECT_AGG',\n 'RANK',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n // 'SOME',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRING_AGG',\n 'SUM',\n 'TO_JSON',\n 'TO_JSONB',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'XMLAGG',\n\n // https://www.postgresql.org/docs/14/functions-window.html\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'ROW_NUMBER',\n\n // https://www.postgresql.org/docs/14/functions-srf.html\n 'GENERATE_SERIES',\n 'GENERATE_SUBSCRIPTS',\n\n // https://www.postgresql.org/docs/14/functions-info.html\n 'ACLDEFAULT',\n 'ACLEXPLODE',\n 'COL_DESCRIPTION',\n 'CURRENT_CATALOG',\n 'CURRENT_DATABASE',\n 'CURRENT_QUERY',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_USER',\n 'FORMAT_TYPE',\n 'HAS_ANY_COLUMN_PRIVILEGE',\n 'HAS_COLUMN_PRIVILEGE',\n 'HAS_DATABASE_PRIVILEGE',\n 'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE',\n 'HAS_FUNCTION_PRIVILEGE',\n 'HAS_LANGUAGE_PRIVILEGE',\n 'HAS_SCHEMA_PRIVILEGE',\n 'HAS_SEQUENCE_PRIVILEGE',\n 'HAS_SERVER_PRIVILEGE',\n 'HAS_TABLESPACE_PRIVILEGE',\n 'HAS_TABLE_PRIVILEGE',\n 'HAS_TYPE_PRIVILEGE',\n 'INET_CLIENT_ADDR',\n 'INET_CLIENT_PORT',\n 'INET_SERVER_ADDR',\n 'INET_SERVER_PORT',\n 'MAKEACLITEM',\n 'OBJ_DESCRIPTION',\n 'PG_BACKEND_PID',\n 'PG_BLOCKING_PIDS',\n 'PG_COLLATION_IS_VISIBLE',\n 'PG_CONF_LOAD_TIME',\n 'PG_CONTROL_CHECKPOINT',\n 'PG_CONTROL_INIT',\n 'PG_CONTROL_SYSTEM',\n 'PG_CONVERSION_IS_VISIBLE',\n 'PG_CURRENT_LOGFILE',\n 'PG_CURRENT_SNAPSHOT',\n 'PG_CURRENT_XACT_ID',\n 'PG_CURRENT_XACT_ID_IF_ASSIGNED',\n 'PG_DESCRIBE_OBJECT',\n 'PG_FUNCTION_IS_VISIBLE',\n 'PG_GET_CATALOG_FOREIGN_KEYS',\n 'PG_GET_CONSTRAINTDEF',\n 'PG_GET_EXPR',\n 'PG_GET_FUNCTIONDEF',\n 'PG_GET_FUNCTION_ARGUMENTS',\n 'PG_GET_FUNCTION_IDENTITY_ARGUMENTS',\n 'PG_GET_FUNCTION_RESULT',\n 'PG_GET_INDEXDEF',\n 'PG_GET_KEYWORDS',\n 'PG_GET_OBJECT_ADDRESS',\n 'PG_GET_OWNED_SEQUENCE',\n 'PG_GET_RULEDEF',\n 'PG_GET_SERIAL_SEQUENCE',\n 'PG_GET_STATISTICSOBJDEF',\n 'PG_GET_TRIGGERDEF',\n 'PG_GET_USERBYID',\n 'PG_GET_VIEWDEF',\n 'PG_HAS_ROLE',\n 'PG_IDENTIFY_OBJECT',\n 'PG_IDENTIFY_OBJECT_AS_ADDRESS',\n 'PG_INDEXAM_HAS_PROPERTY',\n 'PG_INDEX_COLUMN_HAS_PROPERTY',\n 'PG_INDEX_HAS_PROPERTY',\n 'PG_IS_OTHER_TEMP_SCHEMA',\n 'PG_JIT_AVAILABLE',\n 'PG_LAST_COMMITTED_XACT',\n 'PG_LISTENING_CHANNELS',\n 'PG_MY_TEMP_SCHEMA',\n 'PG_NOTIFICATION_QUEUE_USAGE',\n 'PG_OPCLASS_IS_VISIBLE',\n 'PG_OPERATOR_IS_VISIBLE',\n 'PG_OPFAMILY_IS_VISIBLE',\n 'PG_OPTIONS_TO_TABLE',\n 'PG_POSTMASTER_START_TIME',\n 'PG_SAFE_SNAPSHOT_BLOCKING_PIDS',\n 'PG_SNAPSHOT_XIP',\n 'PG_SNAPSHOT_XMAX',\n 'PG_SNAPSHOT_XMIN',\n 'PG_STATISTICS_OBJ_IS_VISIBLE',\n 'PG_TABLESPACE_DATABASES',\n 'PG_TABLESPACE_LOCATION',\n 'PG_TABLE_IS_VISIBLE',\n 'PG_TRIGGER_DEPTH',\n 'PG_TS_CONFIG_IS_VISIBLE',\n 'PG_TS_DICT_IS_VISIBLE',\n 'PG_TS_PARSER_IS_VISIBLE',\n 'PG_TS_TEMPLATE_IS_VISIBLE',\n 'PG_TYPEOF',\n 'PG_TYPE_IS_VISIBLE',\n 'PG_VISIBLE_IN_SNAPSHOT',\n 'PG_XACT_COMMIT_TIMESTAMP',\n 'PG_XACT_COMMIT_TIMESTAMP_ORIGIN',\n 'PG_XACT_STATUS',\n 'PQSERVERVERSION',\n 'ROW_SECURITY_ACTIVE',\n 'SESSION_USER',\n 'SHOBJ_DESCRIPTION',\n 'TO_REGCLASS',\n 'TO_REGCOLLATION',\n 'TO_REGNAMESPACE',\n 'TO_REGOPER',\n 'TO_REGOPERATOR',\n 'TO_REGPROC',\n 'TO_REGPROCEDURE',\n 'TO_REGROLE',\n 'TO_REGTYPE',\n 'TXID_CURRENT',\n 'TXID_CURRENT_IF_ASSIGNED',\n 'TXID_CURRENT_SNAPSHOT',\n 'TXID_SNAPSHOT_XIP',\n 'TXID_SNAPSHOT_XMAX',\n 'TXID_SNAPSHOT_XMIN',\n 'TXID_STATUS',\n 'TXID_VISIBLE_IN_SNAPSHOT',\n 'USER',\n 'VERSION',\n\n // https://www.postgresql.org/docs/14/functions-admin.html\n 'BRIN_DESUMMARIZE_RANGE',\n 'BRIN_SUMMARIZE_NEW_VALUES',\n 'BRIN_SUMMARIZE_RANGE',\n 'CONVERT_FROM',\n 'CURRENT_SETTING',\n 'GIN_CLEAN_PENDING_LIST',\n 'PG_ADVISORY_LOCK',\n 'PG_ADVISORY_LOCK_SHARED',\n 'PG_ADVISORY_UNLOCK',\n 'PG_ADVISORY_UNLOCK_ALL',\n 'PG_ADVISORY_UNLOCK_SHARED',\n 'PG_ADVISORY_XACT_LOCK',\n 'PG_ADVISORY_XACT_LOCK_SHARED',\n 'PG_BACKUP_START_TIME',\n 'PG_CANCEL_BACKEND',\n 'PG_COLLATION_ACTUAL_VERSION',\n 'PG_COLUMN_COMPRESSION',\n 'PG_COLUMN_SIZE',\n 'PG_COPY_LOGICAL_REPLICATION_SLOT',\n 'PG_COPY_PHYSICAL_REPLICATION_SLOT',\n 'PG_CREATE_LOGICAL_REPLICATION_SLOT',\n 'PG_CREATE_PHYSICAL_REPLICATION_SLOT',\n 'PG_CREATE_RESTORE_POINT',\n 'PG_CURRENT_WAL_FLUSH_LSN',\n 'PG_CURRENT_WAL_INSERT_LSN',\n 'PG_CURRENT_WAL_LSN',\n 'PG_DATABASE_SIZE',\n 'PG_DROP_REPLICATION_SLOT',\n 'PG_EXPORT_SNAPSHOT',\n 'PG_FILENODE_RELATION',\n 'PG_GET_WAL_REPLAY_PAUSE_STATE',\n 'PG_IMPORT_SYSTEM_COLLATIONS',\n 'PG_INDEXES_SIZE',\n 'PG_IS_IN_BACKUP',\n 'PG_IS_IN_RECOVERY',\n 'PG_IS_WAL_REPLAY_PAUSED',\n 'PG_LAST_WAL_RECEIVE_LSN',\n 'PG_LAST_WAL_REPLAY_LSN',\n 'PG_LAST_XACT_REPLAY_TIMESTAMP',\n 'PG_LOGICAL_EMIT_MESSAGE',\n 'PG_LOGICAL_SLOT_GET_BINARY_CHANGES',\n 'PG_LOGICAL_SLOT_GET_CHANGES',\n 'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES',\n 'PG_LOGICAL_SLOT_PEEK_CHANGES',\n 'PG_LOG_BACKEND_MEMORY_CONTEXTS',\n 'PG_LS_ARCHIVE_STATUSDIR',\n 'PG_LS_DIR',\n 'PG_LS_LOGDIR',\n 'PG_LS_TMPDIR',\n 'PG_LS_WALDIR',\n 'PG_PARTITION_ANCESTORS',\n 'PG_PARTITION_ROOT',\n 'PG_PARTITION_TREE',\n 'PG_PROMOTE',\n 'PG_READ_BINARY_FILE',\n 'PG_READ_FILE',\n 'PG_RELATION_FILENODE',\n 'PG_RELATION_FILEPATH',\n 'PG_RELATION_SIZE',\n 'PG_RELOAD_CONF',\n 'PG_REPLICATION_ORIGIN_ADVANCE',\n 'PG_REPLICATION_ORIGIN_CREATE',\n 'PG_REPLICATION_ORIGIN_DROP',\n 'PG_REPLICATION_ORIGIN_OID',\n 'PG_REPLICATION_ORIGIN_PROGRESS',\n 'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP',\n 'PG_REPLICATION_ORIGIN_SESSION_PROGRESS',\n 'PG_REPLICATION_ORIGIN_SESSION_RESET',\n 'PG_REPLICATION_ORIGIN_SESSION_SETUP',\n 'PG_REPLICATION_ORIGIN_XACT_RESET',\n 'PG_REPLICATION_ORIGIN_XACT_SETUP',\n 'PG_REPLICATION_SLOT_ADVANCE',\n 'PG_ROTATE_LOGFILE',\n 'PG_SIZE_BYTES',\n 'PG_SIZE_PRETTY',\n 'PG_START_BACKUP',\n 'PG_STAT_FILE',\n 'PG_STOP_BACKUP',\n 'PG_SWITCH_WAL',\n 'PG_TABLESPACE_SIZE',\n 'PG_TABLE_SIZE',\n 'PG_TERMINATE_BACKEND',\n 'PG_TOTAL_RELATION_SIZE',\n 'PG_TRY_ADVISORY_LOCK',\n 'PG_TRY_ADVISORY_LOCK_SHARED',\n 'PG_TRY_ADVISORY_XACT_LOCK',\n 'PG_TRY_ADVISORY_XACT_LOCK_SHARED',\n 'PG_WALFILE_NAME',\n 'PG_WALFILE_NAME_OFFSET',\n 'PG_WAL_LSN_DIFF',\n 'PG_WAL_REPLAY_PAUSE',\n 'PG_WAL_REPLAY_RESUME',\n 'SET_CONFIG',\n\n // https://www.postgresql.org/docs/14/functions-trigger.html\n 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER',\n 'TSVECTOR_UPDATE_TRIGGER',\n 'TSVECTOR_UPDATE_TRIGGER_COLUMN',\n\n // https://www.postgresql.org/docs/14/functions-event-triggers.html\n 'PG_EVENT_TRIGGER_DDL_COMMANDS',\n 'PG_EVENT_TRIGGER_DROPPED_OBJECTS',\n 'PG_EVENT_TRIGGER_TABLE_REWRITE_OID',\n 'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON',\n 'PG_GET_OBJECT_ADDRESS',\n\n // https://www.postgresql.org/docs/14/functions-statistics.html\n 'PG_MCV_LIST_ITEMS',\n\n // cast\n 'CAST',\n];\n","export const keywords: string[] = [\n // https://www.postgresql.org/docs/14/sql-keywords-appendix.html\n 'ALL', // reserved\n 'ANALYSE', // reserved\n 'ANALYZE', // reserved\n 'AND', // reserved\n 'ANY', // reserved\n 'AS', // reserved, requires AS\n 'ASC', // reserved\n 'ASYMMETRIC', // reserved\n 'AUTHORIZATION', // reserved (can be function or type)\n 'BETWEEN', // (cannot be function or type)\n 'BINARY', // reserved (can be function or type)\n 'BOTH', // reserved\n 'CASE', // reserved\n 'CAST', // reserved\n 'CHECK', // reserved\n 'COLLATE', // reserved\n 'COLLATION', // reserved (can be function or type)\n 'COLUMN', // reserved\n 'CONCURRENTLY', // reserved (can be function or type)\n 'CONSTRAINT', // reserved\n 'CREATE', // reserved, requires AS\n 'CROSS', // reserved (can be function or type)\n 'CURRENT_CATALOG', // reserved\n 'CURRENT_DATE', // reserved\n 'CURRENT_ROLE', // reserved\n 'CURRENT_SCHEMA', // reserved (can be function or type)\n 'CURRENT_TIME', // reserved\n 'CURRENT_TIMESTAMP', // reserved\n 'CURRENT_USER', // reserved\n 'DAY', // requires AS\n 'DEFAULT', // reserved\n 'DEFERRABLE', // reserved\n 'DESC', // reserved\n 'DISTINCT', // reserved\n 'DO', // reserved\n 'ELSE', // reserved\n 'END', // reserved\n 'EXCEPT', // reserved, requires AS\n 'EXISTS', // (cannot be function or type)\n 'FALSE', // reserved\n 'FETCH', // reserved, requires AS\n 'FILTER', // requires AS\n 'FOR', // reserved, requires AS\n 'FOREIGN', // reserved\n 'FREEZE', // reserved (can be function or type)\n 'FROM', // reserved, requires AS\n 'FULL', // reserved (can be function or type)\n 'GRANT', // reserved, requires AS\n 'GROUP', // reserved, requires AS\n 'HAVING', // reserved, requires AS\n 'HOUR', // requires AS\n 'ILIKE', // reserved (can be function or type)\n 'IN', // reserved\n 'INITIALLY', // reserved\n 'INNER', // reserved (can be function or type)\n 'INOUT', // (cannot be function or type)\n 'INTERSECT', // reserved, requires AS\n 'INTO', // reserved, requires AS\n 'IS', // reserved (can be function or type)\n 'ISNULL', // reserved (can be function or type), requires AS\n 'JOIN', // reserved (can be function or type)\n 'LATERAL', // reserved\n 'LEADING', // reserved\n 'LEFT', // reserved (can be function or type)\n 'LIKE', // reserved (can be function or type)\n 'LIMIT', // reserved, requires AS\n 'LOCALTIME', // reserved\n 'LOCALTIMESTAMP', // reserved\n 'MINUTE', // requires AS\n 'MONTH', // requires AS\n 'NATURAL', // reserved (can be function or type)\n 'NOT', // reserved\n 'NOTNULL', // reserved (can be function or type), requires AS\n 'NULL', // reserved\n 'NULLIF', // (cannot be function or type)\n 'OFFSET', // reserved, requires AS\n 'ON', // reserved, requires AS\n 'ONLY', // reserved\n 'OR', // reserved\n 'ORDER', // reserved, requires AS\n 'OUT', // (cannot be function or type)\n 'OUTER', // reserved (can be function or type)\n 'OVER', // requires AS\n 'OVERLAPS', // reserved (can be function or type), requires AS\n 'PLACING', // reserved\n 'PRIMARY', // reserved\n 'REFERENCES', // reserved\n 'RETURNING', // reserved, requires AS\n 'RIGHT', // reserved (can be function or type)\n 'ROW', // (cannot be function or type)\n 'SECOND', // requires AS\n 'SELECT', // reserved\n 'SESSION_USER', // reserved\n 'SIMILAR', // reserved (can be function or type)\n 'SOME', // reserved\n 'SYMMETRIC', // reserved\n 'TABLE', // reserved\n 'TABLESAMPLE', // reserved (can be function or type)\n 'THEN', // reserved\n 'TO', // reserved, requires AS\n 'TRAILING', // reserved\n 'TRUE', // reserved\n 'UNION', // reserved, requires AS\n 'UNIQUE', // reserved\n 'USER', // reserved\n 'USING', // reserved\n 'VALUES', // (cannot be function or type)\n 'VARIADIC', // reserved\n 'VERBOSE', // reserved (can be function or type)\n 'WHEN', // reserved\n 'WHERE', // reserved, requires AS\n 'WINDOW', // reserved, requires AS\n 'WITH', // reserved, requires AS\n 'WITHIN', // requires AS\n 'WITHOUT', // requires AS\n 'YEAR', // requires AS\n];\n\nexport const dataTypes: string[] = [\n // https://www.postgresql.org/docs/current/datatype.html\n 'ARRAY', // reserved, requires AS\n 'BIGINT', // (cannot be function or type)\n 'BIT', // (cannot be function or type)\n 'BIT VARYING',\n 'BOOL', // (cannot be function or type)\n 'BOOLEAN', // (cannot be function or type)\n 'CHAR', // (cannot be function or type), requires AS\n 'CHARACTER', // (cannot be function or type), requires AS\n 'CHARACTER VARYING',\n 'DECIMAL', // (cannot be function or type)\n 'DEC', // (cannot be function or type)\n 'DOUBLE',\n 'ENUM',\n 'FLOAT', // (cannot be function or type)\n 'INT', // (cannot be function or type)\n 'INTEGER', // (cannot be function or type)\n 'INTERVAL', // (cannot be function or type)\n 'NCHAR', // (cannot be function or type)\n 'NUMERIC', // (cannot be function or type)\n 'JSON',\n 'JSONB',\n 'PRECISION', // (cannot be function or type), requires AS\n 'REAL', // (cannot be function or type)\n 'SMALLINT', // (cannot be function or type)\n 'TEXT',\n 'TIME', // (cannot be function or type)\n 'TIMESTAMP', // (cannot be function or type)\n 'TIMESTAMPTZ', // (cannot be function or type)\n 'VARCHAR', // (cannot be function or type)\n 'XML',\n 'ZONE',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './postgresql.functions.js';\nimport { dataTypes, keywords } from './postgresql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR {UPDATE | NO KEY UPDATE | SHARE | KEY SHARE} [OF]',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n 'DEFAULT VALUES',\n // - update:\n 'SET',\n // other\n 'RETURNING',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create\n 'CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW',\n 'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE [ONLY]',\n 'WHERE CURRENT OF',\n // - insert:\n 'ON CONFLICT',\n // - delete:\n 'DELETE FROM [ONLY]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS] [ONLY]',\n 'ALTER TABLE ALL IN TABLESPACE',\n 'RENAME [COLUMN]',\n 'RENAME TO',\n 'ADD [COLUMN] [IF NOT EXISTS]',\n 'DROP [COLUMN] [IF EXISTS]',\n 'ALTER [COLUMN]',\n 'SET DATA TYPE', // for alter column\n '{SET | DROP} DEFAULT', // for alter column\n '{SET | DROP} NOT NULL', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE] [ONLY]',\n // other\n 'SET SCHEMA',\n 'AFTER',\n // https://www.postgresql.org/docs/14/sql-commands.html\n 'ABORT',\n 'ALTER AGGREGATE',\n 'ALTER COLLATION',\n 'ALTER CONVERSION',\n 'ALTER DATABASE',\n 'ALTER DEFAULT PRIVILEGES',\n 'ALTER DOMAIN',\n 'ALTER EVENT TRIGGER',\n 'ALTER EXTENSION',\n 'ALTER FOREIGN DATA WRAPPER',\n 'ALTER FOREIGN TABLE',\n 'ALTER FUNCTION',\n 'ALTER GROUP',\n 'ALTER INDEX',\n 'ALTER LANGUAGE',\n 'ALTER LARGE OBJECT',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER OPERATOR',\n 'ALTER OPERATOR CLASS',\n 'ALTER OPERATOR FAMILY',\n 'ALTER POLICY',\n 'ALTER PROCEDURE',\n 'ALTER PUBLICATION',\n 'ALTER ROLE',\n 'ALTER ROUTINE',\n 'ALTER RULE',\n 'ALTER SCHEMA',\n 'ALTER SEQUENCE',\n 'ALTER SERVER',\n 'ALTER STATISTICS',\n 'ALTER SUBSCRIPTION',\n 'ALTER SYSTEM',\n 'ALTER TABLESPACE',\n 'ALTER TEXT SEARCH CONFIGURATION',\n 'ALTER TEXT SEARCH DICTIONARY',\n 'ALTER TEXT SEARCH PARSER',\n 'ALTER TEXT SEARCH TEMPLATE',\n 'ALTER TRIGGER',\n 'ALTER TYPE',\n 'ALTER USER',\n 'ALTER USER MAPPING',\n 'ALTER VIEW',\n 'ANALYZE',\n 'BEGIN',\n 'CALL',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTER',\n 'COMMIT',\n 'COMMIT PREPARED',\n 'COPY',\n 'CREATE ACCESS METHOD',\n 'CREATE AGGREGATE',\n 'CREATE CAST',\n 'CREATE COLLATION',\n 'CREATE CONVERSION',\n 'CREATE DATABASE',\n 'CREATE DOMAIN',\n 'CREATE EVENT TRIGGER',\n 'CREATE EXTENSION',\n 'CREATE FOREIGN DATA WRAPPER',\n 'CREATE FOREIGN TABLE',\n 'CREATE [OR REPLACE] FUNCTION',\n 'CREATE GROUP',\n 'CREATE INDEX',\n 'CREATE LANGUAGE',\n 'CREATE OPERATOR',\n 'CREATE OPERATOR CLASS',\n 'CREATE OPERATOR FAMILY',\n 'CREATE POLICY',\n 'CREATE PROCEDURE',\n 'CREATE PUBLICATION',\n 'CREATE ROLE',\n 'CREATE RULE',\n 'CREATE SCHEMA',\n 'CREATE SEQUENCE',\n 'CREATE SERVER',\n 'CREATE STATISTICS',\n 'CREATE SUBSCRIPTION',\n 'CREATE TABLESPACE',\n 'CREATE TEXT SEARCH CONFIGURATION',\n 'CREATE TEXT SEARCH DICTIONARY',\n 'CREATE TEXT SEARCH PARSER',\n 'CREATE TEXT SEARCH TEMPLATE',\n 'CREATE TRANSFORM',\n 'CREATE TRIGGER',\n 'CREATE TYPE',\n 'CREATE USER',\n 'CREATE USER MAPPING',\n 'DEALLOCATE',\n 'DECLARE',\n 'DISCARD',\n 'DROP ACCESS METHOD',\n 'DROP AGGREGATE',\n 'DROP CAST',\n 'DROP COLLATION',\n 'DROP CONVERSION',\n 'DROP DATABASE',\n 'DROP DOMAIN',\n 'DROP EVENT TRIGGER',\n 'DROP EXTENSION',\n 'DROP FOREIGN DATA WRAPPER',\n 'DROP FOREIGN TABLE',\n 'DROP FUNCTION',\n 'DROP GROUP',\n 'DROP IDENTITY',\n 'DROP INDEX',\n 'DROP LANGUAGE',\n 'DROP MATERIALIZED VIEW [IF EXISTS]',\n 'DROP OPERATOR',\n 'DROP OPERATOR CLASS',\n 'DROP OPERATOR FAMILY',\n 'DROP OWNED',\n 'DROP POLICY',\n 'DROP PROCEDURE',\n 'DROP PUBLICATION',\n 'DROP ROLE',\n 'DROP ROUTINE',\n 'DROP RULE',\n 'DROP SCHEMA',\n 'DROP SEQUENCE',\n 'DROP SERVER',\n 'DROP STATISTICS',\n 'DROP SUBSCRIPTION',\n 'DROP TABLESPACE',\n 'DROP TEXT SEARCH CONFIGURATION',\n 'DROP TEXT SEARCH DICTIONARY',\n 'DROP TEXT SEARCH PARSER',\n 'DROP TEXT SEARCH TEMPLATE',\n 'DROP TRANSFORM',\n 'DROP TRIGGER',\n 'DROP TYPE',\n 'DROP USER',\n 'DROP USER MAPPING',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FETCH',\n 'GRANT',\n 'IMPORT FOREIGN SCHEMA',\n 'LISTEN',\n 'LOAD',\n 'LOCK',\n 'MOVE',\n 'NOTIFY',\n 'OVERRIDING SYSTEM VALUE',\n 'PREPARE',\n 'PREPARE TRANSACTION',\n 'REASSIGN OWNED',\n 'REFRESH MATERIALIZED VIEW',\n 'REINDEX',\n 'RELEASE SAVEPOINT',\n 'RESET [ALL|ROLE|SESSION AUTHORIZATION]',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK PREPARED',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SECURITY LABEL',\n 'SELECT INTO',\n 'SET CONSTRAINTS',\n 'SET ROLE',\n 'SET SESSION AUTHORIZATION',\n 'SET TRANSACTION',\n 'SHOW',\n 'START TRANSACTION',\n 'UNLISTEN',\n 'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'PRIMARY KEY',\n 'GENERATED {ALWAYS | BY DEFAULT} AS IDENTITY',\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n 'DO {NOTHING | UPDATE}',\n 'AS MATERIALIZED',\n '{ROWS | RANGE | GROUPS} BETWEEN',\n // https://www.postgresql.org/docs/current/datatype-datetime.html\n '[TIMESTAMP | TIME] {WITH | WITHOUT} TIME ZONE',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n 'NULLS {FIRST | LAST}',\n 'WITH ORDINALITY',\n]);\n\n// https://www.postgresql.org/docs/14/index.html\nexport const postgresql: DialectOptions = {\n name: 'postgresql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n nestedBlockComments: true,\n extraParens: ['[]'],\n stringTypes: [\n '$$',\n { quote: \"''-qq\", prefixes: ['U&'] },\n { quote: \"''-qq-bs\", prefixes: ['E'], requirePrefix: true },\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: [{ quote: '\"\"-qq', prefixes: ['U&'] }],\n identChars: { rest: '$' },\n paramTypes: { numbered: ['$'] },\n operators: [\n // Arithmetic\n '%',\n '^',\n '|/',\n '||/',\n '@',\n // Assignment\n ':=',\n // Bitwise\n '&',\n '|',\n '#',\n '~',\n '<<',\n '>>',\n // Byte comparison\n '~>~',\n '~<~',\n '~>=~',\n '~<=~',\n // Geometric\n '@-@',\n '@@',\n '##',\n '<->',\n '&&',\n '&<',\n '&>',\n '<<|',\n '&<|',\n '|>>',\n '|&>',\n '<^',\n '^>',\n '?#',\n '?-',\n '?|',\n '?-|',\n '?||',\n '@>',\n '<@',\n '~=',\n // JSON\n '?',\n '@?',\n '?&',\n '->',\n '->>',\n '#>',\n '#>>',\n '#-',\n // Named function params\n '=>',\n // Network address\n '>>=',\n '<<=',\n // Pattern matching\n '~~',\n '~~*',\n '!~~',\n '!~~*',\n // POSIX RegExp\n '~',\n '~*',\n '!~',\n '!~*',\n // Range/multirange\n '-|-',\n // String concatenation\n '||',\n // Text search\n '@@@',\n '!!',\n '^@',\n // Trigram/trigraph\n '<%',\n '%>',\n '<<%',\n '%>>',\n '<<->',\n '<->>',\n '<<<->',\n '<->>>',\n // Type cast\n '::',\n ':',\n // Custom operators defined by pgvector extension\n // https://github.com/pgvector/pgvector#querying\n '<#>',\n '<=>',\n '<+>',\n '<~>',\n '<%>',\n ],\n operatorKeyword: true,\n },\n formatOptions: {\n alwaysDenseOperators: ['::', ':'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html\n 'ANY_VALUE',\n 'APPROXIMATE PERCENTILE_DISC',\n 'AVG',\n 'COUNT',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'STDDEV_SAMP',\n 'STDDEV_POP',\n 'SUM',\n 'VAR_SAMP',\n 'VAR_POP',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html\n 'array',\n 'array_concat',\n 'array_flatten',\n 'get_array_length',\n 'split_to_array',\n 'subarray',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html\n 'BIT_AND',\n 'BIT_OR',\n 'BOOL_AND',\n 'BOOL_OR',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html\n 'COALESCE',\n 'DECODE',\n 'GREATEST',\n 'LEAST',\n 'NVL',\n 'NVL2',\n 'NULLIF',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html\n 'ADD_MONTHS',\n 'AT TIME ZONE',\n 'CONVERT_TIMEZONE',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE_CMP',\n 'DATE_CMP_TIMESTAMP',\n 'DATE_CMP_TIMESTAMPTZ',\n 'DATE_PART_YEAR',\n 'DATEADD',\n 'DATEDIFF',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'EXTRACT',\n 'GETDATE',\n 'INTERVAL_CMP',\n 'LAST_DAY',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'SYSDATE',\n 'TIMEOFDAY',\n 'TIMESTAMP_CMP',\n 'TIMESTAMP_CMP_DATE',\n 'TIMESTAMP_CMP_TIMESTAMPTZ',\n 'TIMESTAMPTZ_CMP',\n 'TIMESTAMPTZ_CMP_DATE',\n 'TIMESTAMPTZ_CMP_TIMESTAMP',\n 'TIMEZONE',\n 'TO_TIMESTAMP',\n 'TRUNC',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html\n 'AddBBox',\n 'DropBBox',\n 'GeometryType',\n 'ST_AddPoint',\n 'ST_Angle',\n 'ST_Area',\n 'ST_AsBinary',\n 'ST_AsEWKB',\n 'ST_AsEWKT',\n 'ST_AsGeoJSON',\n 'ST_AsText',\n 'ST_Azimuth',\n 'ST_Boundary',\n 'ST_Collect',\n 'ST_Contains',\n 'ST_ContainsProperly',\n 'ST_ConvexHull',\n 'ST_CoveredBy',\n 'ST_Covers',\n 'ST_Crosses',\n 'ST_Dimension',\n 'ST_Disjoint',\n 'ST_Distance',\n 'ST_DistanceSphere',\n 'ST_DWithin',\n 'ST_EndPoint',\n 'ST_Envelope',\n 'ST_Equals',\n 'ST_ExteriorRing',\n 'ST_Force2D',\n 'ST_Force3D',\n 'ST_Force3DM',\n 'ST_Force3DZ',\n 'ST_Force4D',\n 'ST_GeometryN',\n 'ST_GeometryType',\n 'ST_GeomFromEWKB',\n 'ST_GeomFromEWKT',\n 'ST_GeomFromText',\n 'ST_GeomFromWKB',\n 'ST_InteriorRingN',\n 'ST_Intersects',\n 'ST_IsPolygonCCW',\n 'ST_IsPolygonCW',\n 'ST_IsClosed',\n 'ST_IsCollection',\n 'ST_IsEmpty',\n 'ST_IsSimple',\n 'ST_IsValid',\n 'ST_Length',\n 'ST_LengthSphere',\n 'ST_Length2D',\n 'ST_LineFromMultiPoint',\n 'ST_LineInterpolatePoint',\n 'ST_M',\n 'ST_MakeEnvelope',\n 'ST_MakeLine',\n 'ST_MakePoint',\n 'ST_MakePolygon',\n 'ST_MemSize',\n 'ST_MMax',\n 'ST_MMin',\n 'ST_Multi',\n 'ST_NDims',\n 'ST_NPoints',\n 'ST_NRings',\n 'ST_NumGeometries',\n 'ST_NumInteriorRings',\n 'ST_NumPoints',\n 'ST_Perimeter',\n 'ST_Perimeter2D',\n 'ST_Point',\n 'ST_PointN',\n 'ST_Points',\n 'ST_Polygon',\n 'ST_RemovePoint',\n 'ST_Reverse',\n 'ST_SetPoint',\n 'ST_SetSRID',\n 'ST_Simplify',\n 'ST_SRID',\n 'ST_StartPoint',\n 'ST_Touches',\n 'ST_Within',\n 'ST_X',\n 'ST_XMax',\n 'ST_XMin',\n 'ST_Y',\n 'ST_YMax',\n 'ST_YMin',\n 'ST_Z',\n 'ST_ZMax',\n 'ST_ZMin',\n 'SupportsBBox',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html\n 'CHECKSUM',\n 'FUNC_SHA1',\n 'FNV_HASH',\n 'MD5',\n 'SHA',\n 'SHA1',\n 'SHA2',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html\n 'HLL',\n 'HLL_CREATE_SKETCH',\n 'HLL_CARDINALITY',\n 'HLL_COMBINE',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html\n 'IS_VALID_JSON',\n 'IS_VALID_JSON_ARRAY',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXTRACT_ARRAY_ELEMENT_TEXT',\n 'JSON_EXTRACT_PATH_TEXT',\n 'JSON_PARSE',\n 'JSON_SERIALIZE',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'CBRT',\n 'CEILING',\n 'CEIL',\n 'COS',\n 'COT',\n 'DEGREES',\n 'DEXP',\n 'DLOG1',\n 'DLOG10',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'MOD',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'ROUND',\n 'SIN',\n 'SIGN',\n 'SQRT',\n 'TAN',\n 'TO_HEX',\n 'TRUNC',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html\n 'EXPLAIN_MODEL',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html\n 'ASCII',\n 'BPCHARCMP',\n 'BTRIM',\n 'BTTEXT_PATTERN_CMP',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHARINDEX',\n 'CHR',\n 'COLLATE',\n 'CONCAT',\n 'CRC32',\n 'DIFFERENCE',\n 'INITCAP',\n 'LEFT',\n 'RIGHT',\n 'LEN',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'RPAD',\n 'LTRIM',\n 'OCTETINDEX',\n 'OCTET_LENGTH',\n 'POSITION',\n 'QUOTE_IDENT',\n 'QUOTE_LITERAL',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RTRIM',\n 'SOUNDEX',\n 'SPLIT_PART',\n 'STRPOS',\n 'STRTOL',\n 'SUBSTRING',\n 'TEXTLEN',\n 'TRANSLATE',\n 'TRIM',\n 'UPPER',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html\n 'decimal_precision',\n 'decimal_scale',\n 'is_array',\n 'is_bigint',\n 'is_boolean',\n 'is_char',\n 'is_decimal',\n 'is_float',\n 'is_integer',\n 'is_object',\n 'is_scalar',\n 'is_smallint',\n 'is_varchar',\n 'json_typeof',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html\n 'AVG',\n 'COUNT',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'LAG',\n 'LEAD',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n 'STDDEV_SAMP',\n 'STDDEV_POP',\n 'SUM',\n 'VAR_SAMP',\n 'VAR_POP',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html\n 'CAST',\n 'CONVERT',\n 'TO_CHAR',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TEXT_TO_INT_ALT',\n 'TEXT_TO_NUMERIC_ALT',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html\n 'CHANGE_QUERY_PRIORITY',\n 'CHANGE_SESSION_PRIORITY',\n 'CHANGE_USER_PRIORITY',\n 'CURRENT_SETTING',\n 'PG_CANCEL_BACKEND',\n 'PG_TERMINATE_BACKEND',\n 'REBOOT_CLUSTER',\n 'SET_CONFIG',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html\n 'CURRENT_AWS_ACCOUNT',\n 'CURRENT_DATABASE',\n 'CURRENT_NAMESPACE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'HAS_ASSUMEROLE_PRIVILEGE',\n 'HAS_DATABASE_PRIVILEGE',\n 'HAS_SCHEMA_PRIVILEGE',\n 'HAS_TABLE_PRIVILEGE',\n 'PG_BACKEND_PID',\n 'PG_GET_COLS',\n 'PG_GET_GRANTEE_BY_IAM_ROLE',\n 'PG_GET_IAM_ROLE_BY_USER',\n 'PG_GET_LATE_BINDING_VIEW_COLS',\n 'PG_LAST_COPY_COUNT',\n 'PG_LAST_COPY_ID',\n 'PG_LAST_UNLOAD_ID',\n 'PG_LAST_QUERY_ID',\n 'PG_LAST_UNLOAD_COUNT',\n 'SESSION_USER',\n 'SLICE_NUM',\n 'USER',\n 'VERSION',\n];\n","export const keywords: string[] = [\n // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BOTH',\n 'CHECK',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GROUP',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'LANGUAGE',\n 'LEADING',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'MINUS',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OID',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PERMISSIONS',\n 'PLACING',\n 'PRIMARY',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESPECT',\n 'RESTORE',\n 'SIMILAR',\n 'SNAPSHOT',\n 'SOME',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'THEN',\n 'TIMESTAMP',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'UNIQUE',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WITHOUT',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n 'ACCEPTANYDATE',\n 'ACCEPTINVCHARS',\n 'BLANKSASNULL',\n 'DATEFORMAT',\n 'EMPTYASNULL',\n 'ENCODING',\n 'ESCAPE',\n 'EXPLICIT_IDS',\n 'FILLRECORD',\n 'IGNOREBLANKLINES',\n 'IGNOREHEADER',\n 'REMOVEQUOTES',\n 'ROUNDEC',\n 'TIMEFORMAT',\n 'TRIMBLANKS',\n 'TRUNCATECOLUMNS',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html\n 'COMPROWS',\n 'COMPUPDATE',\n 'MAXERROR',\n 'NOLOAD',\n 'STATUPDATE',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html\n 'FORMAT',\n 'CSV',\n 'DELIMITER',\n 'FIXEDWIDTH',\n 'SHAPEFILE',\n 'AVRO',\n 'JSON',\n 'PARQUET',\n 'ORC',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html\n 'ACCESS_KEY_ID',\n 'CREDENTIALS',\n 'ENCRYPTED',\n 'IAM_ROLE',\n 'MASTER_SYMMETRIC_KEY',\n 'SECRET_ACCESS_KEY',\n 'SESSION_TOKEN',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html\n 'BZIP2',\n 'GZIP',\n 'LZOP',\n 'ZSTD',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html\n 'MANIFEST',\n 'READRATIO',\n 'REGION',\n 'SSH',\n\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html\n 'RAW',\n 'AZ64',\n 'BYTEDICT',\n 'DELTA',\n 'DELTA32K',\n 'LZO',\n 'MOSTLY8',\n 'MOSTLY16',\n 'MOSTLY32',\n 'RUNLENGTH',\n 'TEXT255',\n 'TEXT32K',\n\n // misc\n // CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)\n 'CATALOG_ROLE',\n 'SECRET_ARN',\n 'EXTERNAL',\n // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html\n 'AUTO',\n 'EVEN',\n 'KEY',\n 'PREDICATE', // ANALYZE | ANALYSE (https://docs.aws.amazon.com/redshift/latest/dg/r_ANALYZE.html)\n // unknown\n 'COMPRESSION',\n\n /**\n * Other keywords not included:\n * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html\n * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html\n * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html\n * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html\n */\n];\n\nexport const dataTypes: string[] = [\n // https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-text-and-bpchar-types\n 'ARRAY',\n 'BIGINT',\n 'BPCHAR',\n 'CHAR',\n 'CHARACTER VARYING',\n 'CHARACTER',\n 'DECIMAL',\n 'INT',\n 'INT2',\n 'INT4',\n 'INT8',\n 'INTEGER',\n 'NCHAR',\n 'NUMERIC',\n 'NVARCHAR',\n 'SMALLINT',\n 'TEXT',\n 'VARBYTE',\n 'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './redshift.functions.js';\nimport { dataTypes, keywords } from './redshift.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE | MATERIALIZED] VIEW',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ALTER TABLE APPEND',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME TO',\n 'RENAME COLUMN',\n 'ALTER COLUMN',\n 'TYPE', // for alter column\n 'ENCODE', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html\n 'ABORT',\n 'ALTER DATABASE',\n 'ALTER DATASHARE',\n 'ALTER DEFAULT PRIVILEGES',\n 'ALTER GROUP',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER PROCEDURE',\n 'ALTER SCHEMA',\n 'ALTER USER',\n 'ANALYSE',\n 'ANALYZE',\n 'ANALYSE COMPRESSION',\n 'ANALYZE COMPRESSION',\n 'BEGIN',\n 'CALL',\n 'CANCEL',\n 'CLOSE',\n 'COMMIT',\n 'COPY',\n 'CREATE DATABASE',\n 'CREATE DATASHARE',\n 'CREATE EXTERNAL FUNCTION',\n 'CREATE EXTERNAL SCHEMA',\n 'CREATE EXTERNAL TABLE',\n 'CREATE FUNCTION',\n 'CREATE GROUP',\n 'CREATE LIBRARY',\n 'CREATE MODEL',\n 'CREATE PROCEDURE',\n 'CREATE SCHEMA',\n 'CREATE USER',\n 'DEALLOCATE',\n 'DECLARE',\n 'DESC DATASHARE',\n 'DROP DATABASE',\n 'DROP DATASHARE',\n 'DROP FUNCTION',\n 'DROP GROUP',\n 'DROP LIBRARY',\n 'DROP MODEL',\n 'DROP MATERIALIZED VIEW',\n 'DROP PROCEDURE',\n 'DROP SCHEMA',\n 'DROP USER',\n 'DROP VIEW',\n 'DROP',\n 'EXECUTE',\n 'EXPLAIN',\n 'FETCH',\n 'GRANT',\n 'LOCK',\n 'PREPARE',\n 'REFRESH MATERIALIZED VIEW',\n 'RESET',\n 'REVOKE',\n 'ROLLBACK',\n 'SELECT INTO',\n 'SET SESSION AUTHORIZATION',\n 'SET SESSION CHARACTERISTICS',\n 'SHOW',\n 'SHOW EXTERNAL TABLE',\n 'SHOW MODEL',\n 'SHOW DATASHARES',\n 'SHOW PROCEDURE',\n 'SHOW TABLE',\n 'SHOW VIEW',\n 'START TRANSACTION',\n 'UNLOAD',\n 'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT', 'MINUS']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n 'NULL AS',\n // https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html\n 'DATA CATALOG',\n 'HIVE METASTORE',\n // in window specifications\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html\nexport const redshift: DialectOptions = {\n name: 'redshift',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n stringTypes: [\"''-qq\"],\n identTypes: [`\"\"-qq`],\n identChars: { first: '#' },\n paramTypes: { numbered: ['$'] },\n operators: [\n '^',\n '%',\n '@',\n '|/',\n '||/',\n '&',\n '|',\n // '#', conflicts with first char of identifier\n '~',\n '<<',\n '>>',\n '||',\n '::',\n ],\n },\n formatOptions: {\n alwaysDenseOperators: ['::'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const keywords: string[] = [\n // https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANTI',\n 'ANY',\n 'ARCHIVE',\n 'AS',\n 'ASC',\n 'AT',\n 'AUTHORIZATION',\n 'BETWEEN',\n 'BOTH',\n 'BUCKET',\n 'BUCKETS',\n 'BY',\n 'CACHE',\n 'CASCADE',\n 'CAST',\n 'CHANGE',\n 'CHECK',\n 'CLEAR',\n 'CLUSTER',\n 'CLUSTERED',\n 'CODEGEN',\n 'COLLATE',\n 'COLLECTION',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMPACT',\n 'COMPACTIONS',\n 'COMPUTE',\n 'CONCATENATE',\n 'CONSTRAINT',\n 'COST',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'DATA',\n 'DATABASE',\n 'DATABASES',\n 'DAY',\n 'DBPROPERTIES',\n 'DEFINED',\n 'DELETE',\n 'DELIMITED',\n 'DESC',\n 'DESCRIBE',\n 'DFS',\n 'DIRECTORIES',\n 'DIRECTORY',\n 'DISTINCT',\n 'DISTRIBUTE',\n 'DIV',\n 'DROP',\n 'ESCAPE',\n 'ESCAPED',\n 'EXCEPT',\n 'EXCHANGE',\n 'EXISTS',\n 'EXPORT',\n 'EXTENDED',\n 'EXTERNAL',\n 'EXTRACT',\n 'FALSE',\n 'FETCH',\n 'FIELDS',\n 'FILTER',\n 'FILEFORMAT',\n 'FIRST',\n 'FIRST_VALUE',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FORMATTED',\n 'FULL',\n 'FUNCTION',\n 'FUNCTIONS',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'HOUR',\n 'IF',\n 'IGNORE',\n 'IMPORT',\n 'IN',\n 'INDEX',\n 'INDEXES',\n 'INNER',\n 'INPATH',\n 'INPUTFORMAT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ITEMS',\n 'KEYS',\n 'LAST',\n 'LAST_VALUE',\n 'LATERAL',\n 'LAZY',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LINES',\n 'LIST',\n 'LOCAL',\n 'LOCATION',\n 'LOCK',\n 'LOCKS',\n 'LOGICAL',\n 'MACRO',\n 'MATCHED',\n 'MERGE',\n 'MINUTE',\n 'MONTH',\n 'MSCK',\n 'NAMESPACE',\n 'NAMESPACES',\n 'NATURAL',\n 'NO',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'OF',\n 'ONLY',\n 'OPTION',\n 'OPTIONS',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTPUTFORMAT',\n 'OVER',\n 'OVERLAPS',\n 'OVERLAY',\n 'OVERWRITE',\n 'OWNER',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONS',\n 'PERCENT',\n 'PLACING',\n 'POSITION',\n 'PRECEDING',\n 'PRIMARY',\n 'PRINCIPALS',\n 'PROPERTIES',\n 'PURGE',\n 'QUERY',\n 'RANGE',\n 'RECORDREADER',\n 'RECORDWRITER',\n 'RECOVER',\n 'REDUCE',\n 'REFERENCES',\n 'RENAME',\n 'REPAIR',\n 'REPLACE',\n 'RESPECT',\n 'RESTRICT',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROLE',\n 'ROLES',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SCHEMA',\n 'SECOND',\n 'SELECT',\n 'SEMI',\n 'SEPARATED',\n 'SERDE',\n 'SERDEPROPERTIES',\n 'SESSION_USER',\n 'SETS',\n 'SHOW',\n 'SKEWED',\n 'SOME',\n 'SORT',\n 'SORTED',\n 'START',\n 'STATISTICS',\n 'STORED',\n 'STRATIFY',\n 'SUBSTR',\n 'SUBSTRING',\n 'TABLE',\n 'TABLES',\n 'TBLPROPERTIES',\n 'TEMPORARY',\n 'TERMINATED',\n 'THEN',\n 'TO',\n 'TOUCH',\n 'TRAILING',\n 'TRANSACTION',\n 'TRANSACTIONS',\n 'TRIM',\n 'TRUE',\n 'TRUNCATE',\n 'UNARCHIVE',\n 'UNBOUNDED',\n 'UNCACHE',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNLOCK',\n 'UNSET',\n 'USE',\n 'USER',\n 'USING',\n 'VIEW',\n 'WINDOW',\n 'YEAR',\n // other\n 'ANALYSE',\n 'ARRAY_ZIP',\n 'COALESCE',\n 'CONTAINS',\n 'CONVERT',\n 'DAYS',\n 'DAY_HOUR',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DECODE',\n 'DEFAULT',\n 'DISTINCTROW',\n 'ENCODE',\n 'EXPLODE',\n 'EXPLODE_OUTER',\n 'FIXED',\n 'GREATEST',\n 'GROUP_CONCAT',\n 'HOURS',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IFNULL',\n 'LEAST',\n 'LEVEL',\n 'MINUTE_SECOND',\n 'NULLIF',\n 'OFFSET',\n 'ON',\n 'OPTIMIZE',\n 'REGEXP',\n 'SEPARATOR',\n 'SIZE',\n 'TYPE',\n 'TYPES',\n 'UNSIGNED',\n 'VARIABLES',\n 'YEAR_MONTH',\n];\n\nexport const dataTypes: string[] = [\n // https://spark.apache.org/docs/latest/sql-ref-datatypes.html\n 'ARRAY',\n 'BIGINT',\n 'BINARY',\n 'BOOLEAN',\n 'BYTE',\n 'CHAR',\n 'DATE',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTEGER',\n 'INTERVAL',\n 'LONG',\n 'MAP',\n 'NUMERIC',\n 'REAL',\n 'SHORT',\n 'SMALLINT',\n 'STRING',\n 'STRUCT',\n 'TIMESTAMP_LTZ',\n 'TIMESTAMP_NTZ',\n 'TIMESTAMP',\n 'TINYINT',\n 'VARCHAR', // No varchar type in Spark, only STRING. Added for the sake of tests\n];\n","export const functions: string[] = [\n // http://spark.apache.org/docs/latest/sql-ref-functions.html\n //\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions\n // 'ANY',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_PERCENTILE',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'BOOL_AND',\n 'BOOL_OR',\n 'COLLECT_LIST',\n 'COLLECT_SET',\n 'CORR',\n 'COUNT',\n 'COUNT',\n 'COUNT',\n 'COUNT_IF',\n 'COUNT_MIN_SKETCH',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'EVERY',\n 'FIRST',\n 'FIRST_VALUE',\n 'GROUPING',\n 'GROUPING_ID',\n 'KURTOSIS',\n 'LAST',\n 'LAST_VALUE',\n 'MAX',\n 'MAX_BY',\n 'MEAN',\n 'MIN',\n 'MIN_BY',\n 'PERCENTILE',\n 'PERCENTILE',\n 'PERCENTILE_APPROX',\n 'SKEWNESS',\n // 'SOME',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions\n 'CUME_DIST',\n 'DENSE_RANK',\n 'LAG',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'ROW_NUMBER',\n\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions\n 'ARRAY',\n 'ARRAY_CONTAINS',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_INTERSECT',\n 'ARRAY_JOIN',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_REMOVE',\n 'ARRAY_REPEAT',\n 'ARRAY_UNION',\n 'ARRAYS_OVERLAP',\n 'ARRAYS_ZIP',\n 'FLATTEN',\n 'SEQUENCE',\n 'SHUFFLE',\n 'SLICE',\n 'SORT_ARRAY',\n\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions\n 'ELEMENT_AT',\n 'ELEMENT_AT',\n 'MAP_CONCAT',\n 'MAP_ENTRIES',\n 'MAP_FROM_ARRAYS',\n 'MAP_FROM_ENTRIES',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'STR_TO_MAP',\n\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions\n 'ADD_MONTHS',\n 'CURRENT_DATE',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_FROM_UNIX_DATE',\n 'DATE_PART',\n 'DATE_SUB',\n 'DATE_TRUNC',\n 'DATEDIFF',\n 'DAY',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'EXTRACT',\n 'FROM_UNIXTIME',\n 'FROM_UTC_TIMESTAMP',\n 'HOUR',\n 'LAST_DAY',\n 'MAKE_DATE',\n 'MAKE_DT_INTERVAL',\n 'MAKE_INTERVAL',\n 'MAKE_TIMESTAMP',\n 'MAKE_YM_INTERVAL',\n 'MINUTE',\n 'MONTH',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'NOW',\n 'QUARTER',\n 'SECOND',\n 'SESSION_WINDOW',\n 'TIMESTAMP_MICROS',\n 'TIMESTAMP_MILLIS',\n 'TIMESTAMP_SECONDS',\n 'TO_DATE',\n 'TO_TIMESTAMP',\n 'TO_UNIX_TIMESTAMP',\n 'TO_UTC_TIMESTAMP',\n 'TRUNC',\n 'UNIX_DATE',\n 'UNIX_MICROS',\n 'UNIX_MILLIS',\n 'UNIX_SECONDS',\n 'UNIX_TIMESTAMP',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WINDOW',\n 'YEAR',\n\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions\n 'FROM_JSON',\n 'GET_JSON_OBJECT',\n 'JSON_ARRAY_LENGTH',\n 'JSON_OBJECT_KEYS',\n 'JSON_TUPLE',\n 'SCHEMA_OF_JSON',\n 'TO_JSON',\n\n // http://spark.apache.org/docs/latest/api/sql/index.html\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'AGGREGATE',\n 'ARRAY_SORT',\n 'ASCII',\n 'ASIN',\n 'ASINH',\n 'ASSERT_TRUE',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'BASE64',\n 'BIN',\n 'BIT_COUNT',\n 'BIT_GET',\n 'BIT_LENGTH',\n 'BROUND',\n 'BTRIM',\n 'CARDINALITY',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONV',\n 'COS',\n 'COSH',\n 'COT',\n 'CRC32',\n 'CURRENT_CATALOG',\n 'CURRENT_DATABASE',\n 'CURRENT_USER',\n 'DEGREES',\n // 'E',\n 'ELT',\n 'EXP',\n 'EXPM1',\n 'FACTORIAL',\n 'FIND_IN_SET',\n 'FLOOR',\n 'FORALL',\n 'FORMAT_NUMBER',\n 'FORMAT_STRING',\n 'FROM_CSV',\n 'GETBIT',\n 'HASH',\n 'HEX',\n 'HYPOT',\n 'INITCAP',\n 'INLINE',\n 'INLINE_OUTER',\n 'INPUT_FILE_BLOCK_LENGTH',\n 'INPUT_FILE_BLOCK_START',\n 'INPUT_FILE_NAME',\n 'INSTR',\n 'ISNAN',\n 'ISNOTNULL',\n 'ISNULL',\n 'JAVA_METHOD',\n 'LCASE',\n 'LEFT',\n 'LENGTH',\n 'LEVENSHTEIN',\n 'LN',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG1P',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAP_FILTER',\n 'MAP_ZIP_WITH',\n 'MD5',\n 'MOD',\n 'MONOTONICALLY_INCREASING_ID',\n 'NAMED_STRUCT',\n 'NANVL',\n 'NEGATIVE',\n 'NVL',\n 'NVL2',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PARSE_URL',\n 'PI',\n 'PMOD',\n 'POSEXPLODE',\n 'POSEXPLODE_OUTER',\n 'POSITION',\n 'POSITIVE',\n 'POW',\n 'POWER',\n 'PRINTF',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RAND',\n 'RANDN',\n 'RANDOM',\n 'REFLECT',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RINT',\n 'ROUND',\n 'RPAD',\n 'RTRIM',\n 'SCHEMA_OF_CSV',\n 'SENTENCES',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SHIFTLEFT',\n 'SHIFTRIGHT',\n 'SHIFTRIGHTUNSIGNED',\n 'SIGN',\n 'SIGNUM',\n 'SIN',\n 'SINH',\n 'SOUNDEX',\n 'SPACE',\n 'SPARK_PARTITION_ID',\n 'SPLIT',\n 'SQRT',\n 'STACK',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'TAN',\n 'TANH',\n 'TO_CSV',\n 'TRANSFORM_KEYS',\n 'TRANSFORM_VALUES',\n 'TRANSLATE',\n 'TRIM',\n 'TRY_ADD',\n 'TRY_DIVIDE',\n 'TYPEOF',\n 'UCASE',\n 'UNBASE64',\n 'UNHEX',\n 'UPPER',\n 'UUID',\n 'VERSION',\n 'WIDTH_BUCKET',\n 'XPATH',\n 'XPATH_BOOLEAN',\n 'XPATH_DOUBLE',\n 'XPATH_FLOAT',\n 'XPATH_INT',\n 'XPATH_LONG',\n 'XPATH_NUMBER',\n 'XPATH_SHORT',\n 'XPATH_STRING',\n 'XXHASH64',\n 'ZIP_WITH',\n\n // cast\n 'CAST',\n\n // Shorthand functions to use in place of CASE expression\n 'COALESCE',\n 'NULLIF',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { dataTypes, keywords } from './spark.keywords.js';\nimport { functions } from './spark.functions.js';\n\n// http://spark.apache.org/docs/latest/sql-ref-syntax.html\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'SORT BY',\n 'CLUSTER BY',\n 'DISTRIBUTE BY',\n 'LIMIT',\n // Data manipulation\n // - insert:\n 'INSERT [INTO | OVERWRITE] [TABLE]',\n 'VALUES',\n // - insert overwrite directory:\n // https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory.html\n 'INSERT OVERWRITE [LOCAL] DIRECTORY',\n // - load:\n // https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html\n 'LOAD DATA [LOCAL] INPATH',\n '[OVERWRITE] INTO TABLE',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [EXTERNAL] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [GLOBAL TEMPORARY | TEMPORARY] VIEW [IF NOT EXISTS]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD COLUMNS',\n 'DROP {COLUMN | COLUMNS}',\n 'RENAME TO',\n 'RENAME COLUMN',\n 'ALTER COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'LATERAL VIEW',\n 'ALTER DATABASE',\n 'ALTER VIEW',\n 'CREATE DATABASE',\n 'CREATE FUNCTION',\n 'DROP DATABASE',\n 'DROP FUNCTION',\n 'DROP VIEW',\n 'REPAIR TABLE',\n 'USE DATABASE',\n // Data Retrieval\n 'TABLESAMPLE',\n 'PIVOT',\n 'TRANSFORM',\n 'EXPLAIN',\n // Auxiliary\n 'ADD FILE',\n 'ADD JAR',\n 'ANALYZE TABLE',\n 'CACHE TABLE',\n 'CLEAR CACHE',\n 'DESCRIBE DATABASE',\n 'DESCRIBE FUNCTION',\n 'DESCRIBE QUERY',\n 'DESCRIBE TABLE',\n 'LIST FILE',\n 'LIST JAR',\n 'REFRESH',\n 'REFRESH TABLE',\n 'REFRESH FUNCTION',\n 'RESET',\n 'SHOW COLUMNS',\n 'SHOW CREATE TABLE',\n 'SHOW DATABASES',\n 'SHOW FUNCTIONS',\n 'SHOW PARTITIONS',\n 'SHOW TABLE EXTENDED',\n 'SHOW TABLES',\n 'SHOW TBLPROPERTIES',\n 'SHOW VIEWS',\n 'UNCACHE TABLE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n // non-standard-joins\n '[LEFT] {ANTI | SEMI} JOIN',\n 'NATURAL [LEFT] {ANTI | SEMI} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'CURRENT ROW',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// http://spark.apache.org/docs/latest/sql-programming-guide.html\nexport const spark: DialectOptions = {\n name: 'spark',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: [\n \"''-bs\",\n '\"\"-bs',\n { quote: \"''-raw\", prefixes: ['R', 'X'], requirePrefix: true },\n { quote: '\"\"-raw', prefixes: ['R', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||', '->'],\n postProcess,\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]) {\n return tokens.map((token, i) => {\n const prevToken = tokens[i - 1] || EOF_TOKEN;\n const nextToken = tokens[i + 1] || EOF_TOKEN;\n\n // [WINDOW](...)\n if (isToken.WINDOW(token) && nextToken.type === TokenType.OPEN_PAREN) {\n // This is a function call, treat it as a reserved function name\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n\n // TODO: deprecate this once ITEMS is merged with COLLECTION\n if (token.text === 'ITEMS' && token.type === TokenType.RESERVED_KEYWORD) {\n if (!(prevToken.text === 'COLLECTION' && nextToken.text === 'TERMINATED')) {\n // this is a word and not COLLECTION ITEMS\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n }\n\n return token;\n });\n}\n","export const functions: string[] = [\n // https://www.sqlite.org/lang_corefunc.html\n 'ABS',\n 'CHANGES',\n 'CHAR',\n 'COALESCE',\n 'FORMAT',\n 'GLOB',\n 'HEX',\n 'IFNULL',\n 'IIF',\n 'INSTR',\n 'LAST_INSERT_ROWID',\n 'LENGTH',\n 'LIKE',\n 'LIKELIHOOD',\n 'LIKELY',\n 'LOAD_EXTENSION',\n 'LOWER',\n 'LTRIM',\n 'NULLIF',\n 'PRINTF',\n 'QUOTE',\n 'RANDOM',\n 'RANDOMBLOB',\n 'REPLACE',\n 'ROUND',\n 'RTRIM',\n 'SIGN',\n 'SOUNDEX',\n 'SQLITE_COMPILEOPTION_GET',\n 'SQLITE_COMPILEOPTION_USED',\n 'SQLITE_OFFSET',\n 'SQLITE_SOURCE_ID',\n 'SQLITE_VERSION',\n 'SUBSTR',\n 'SUBSTRING',\n 'TOTAL_CHANGES',\n 'TRIM',\n 'TYPEOF',\n 'UNICODE',\n 'UNLIKELY',\n 'UPPER',\n 'ZEROBLOB',\n\n // https://www.sqlite.org/lang_aggfunc.html\n 'AVG',\n 'COUNT',\n 'GROUP_CONCAT',\n 'MAX',\n 'MIN',\n 'SUM',\n 'TOTAL',\n\n // https://www.sqlite.org/lang_datefunc.html\n 'DATE',\n 'TIME',\n 'DATETIME',\n 'JULIANDAY',\n 'UNIXEPOCH',\n 'STRFTIME',\n\n // https://www.sqlite.org/windowfunctions.html#biwinfunc\n 'row_number',\n 'rank',\n 'dense_rank',\n 'percent_rank',\n 'cume_dist',\n 'ntile',\n 'lag',\n 'lead',\n 'first_value',\n 'last_value',\n 'nth_value',\n\n // https://www.sqlite.org/lang_mathfunc.html\n 'ACOS',\n 'ACOSH',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'CEIL',\n 'CEILING',\n 'COS',\n 'COSH',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'MOD',\n 'PI',\n 'POW',\n 'POWER',\n 'RADIANS',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n 'TRUNC',\n\n // https://www.sqlite.org/json1.html\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_ARRAY_LENGTH',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_OBJECT',\n 'JSON_PATCH',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SET',\n 'JSON_TYPE',\n 'JSON_TYPE',\n 'JSON_VALID',\n 'JSON_QUOTE',\n 'JSON_GROUP_ARRAY',\n 'JSON_GROUP_OBJECT',\n 'JSON_EACH',\n 'JSON_TREE',\n\n // cast\n 'CAST',\n];\n","export const keywords: string[] = [\n // https://www.sqlite.org/lang_keywords.html\n // Note: The keywords listed on that URL are not all reserved keywords.\n // We'll need to clean up this list to only include reserved keywords.\n 'ABORT',\n 'ACTION',\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ARE',\n 'ALWAYS',\n 'ANALYZE',\n 'AS',\n 'ASC',\n 'ATTACH',\n 'AUTOINCREMENT',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BY',\n 'CASCADE',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'CONFLICT',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATABASE',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFERRED',\n 'DELETE',\n 'DESC',\n 'DETACH',\n 'DISTINCT',\n 'DO',\n 'DROP',\n 'EACH',\n 'ELSE',\n 'END',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCLUDE',\n 'EXCLUSIVE',\n 'EXISTS',\n 'EXPLAIN',\n 'FAIL',\n 'FILTER',\n 'FIRST',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FROM',\n 'FULL',\n 'GENERATED',\n 'GLOB',\n 'GROUP',\n 'HAVING',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IN',\n 'INDEX',\n 'INDEXED',\n 'INITIALLY',\n 'INNER',\n 'INSERT',\n 'INSTEAD',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'KEY',\n 'LAST',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'MATCH',\n 'MATERIALIZED',\n 'NATURAL',\n 'NO',\n 'NOT',\n 'NOTHING',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OF',\n 'OFFSET',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OVER',\n 'PARTITION',\n 'PLAN',\n 'PRAGMA',\n 'PRECEDING',\n 'PRIMARY',\n 'QUERY',\n 'RAISE',\n 'RANGE',\n 'RECURSIVE',\n 'REFERENCES',\n 'REGEXP',\n 'REINDEX',\n 'RELEASE',\n 'RENAME',\n 'REPLACE',\n 'RESTRICT',\n 'RETURNING',\n 'RIGHT',\n 'ROLLBACK',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SELECT',\n 'SET',\n 'TABLE',\n 'TEMP',\n 'TEMPORARY',\n 'THEN',\n 'TIES',\n 'TO',\n 'TRANSACTION',\n 'TRIGGER',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUE',\n 'UPDATE',\n 'USING',\n 'VACUUM',\n 'VALUES',\n 'VIEW',\n 'VIRTUAL',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'WITHOUT',\n];\n\nexport const dataTypes: string[] = [\n // SQLite allows any word as a data type, e.g. CREATE TABLE foo (col1 madeupname(123));\n // Here we just list some common ones as SQL Formatter\n // is only able to detect a predefined list of data types.\n // https://www.sqlite.org/stricttables.html\n // https://www.sqlite.org/datatype3.html\n 'ANY',\n 'ARRAY',\n 'BLOB',\n 'CHARACTER',\n 'DECIMAL',\n 'INT',\n 'INTEGER',\n 'NATIVE CHARACTER',\n 'NCHAR',\n 'NUMERIC',\n 'NVARCHAR',\n 'REAL',\n 'TEXT',\n 'VARCHAR',\n 'VARYING CHARACTER',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sqlite.functions.js';\nimport { dataTypes, keywords } from './sqlite.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK] INTO',\n 'REPLACE INTO',\n 'VALUES',\n // - update:\n 'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [TEMPORARY | TEMP] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK]',\n // - insert:\n 'ON CONFLICT',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [COLUMN]',\n 'RENAME TO',\n // - set schema\n 'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\n// joins - https://www.sqlite.org/syntax/join-operator.html\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE | GROUPS} BETWEEN',\n 'DO UPDATE',\n]);\n\nexport const sqlite: DialectOptions = {\n name: 'sqlite',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n stringTypes: [\n \"''-qq\",\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n // Depending on context SQLite also supports double-quotes for strings,\n // and single-quotes for identifiers.\n ],\n identTypes: [`\"\"-qq`, '``', '[]'],\n // https://www.sqlite.org/lang_expr.html#parameters\n paramTypes: { positional: true, numbered: ['?'], named: [':', '@', '$'] },\n operators: ['%', '~', '&', '|', '<<', '>>', '==', '->', '->>', '||'],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_9_set_function_specification\n 'GROUPING',\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_10_window_function\n 'RANK',\n 'DENSE_RANK',\n 'PERCENT_RANK',\n 'CUME_DIST',\n 'ROW_NUMBER',\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_27_numeric_value_function\n 'POSITION',\n 'OCCURRENCES_REGEX',\n 'POSITION_REGEX',\n 'EXTRACT',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'OCTET_LENGTH',\n 'CARDINALITY',\n 'ABS',\n 'MOD',\n 'LN',\n 'EXP',\n 'POWER',\n 'SQRT',\n 'FLOOR',\n 'CEIL',\n 'CEILING',\n 'WIDTH_BUCKET',\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_29_string_value_function\n 'SUBSTRING',\n 'SUBSTRING_REGEX',\n 'UPPER',\n 'LOWER',\n 'CONVERT',\n 'TRANSLATE',\n 'TRANSLATE_REGEX',\n 'TRIM',\n 'OVERLAY',\n 'NORMALIZE',\n 'SPECIFICTYPE',\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_31_datetime_value_function\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'LOCALTIME',\n 'CURRENT_TIMESTAMP',\n 'LOCALTIMESTAMP',\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_38_multiset_value_function\n // SET serves multiple roles: a SET() function and a SET keyword e.g. in UPDATE table SET ...\n // multiset\n // 'SET', (disabled for now)\n\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_10_9_aggregate_function\n 'COUNT',\n 'AVG',\n 'MAX',\n 'MIN',\n 'SUM',\n // 'EVERY',\n // 'ANY',\n // 'SOME',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'VAR_SAMP',\n 'VAR_POP',\n 'COLLECT',\n 'FUSION',\n 'INTERSECTION',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CORR',\n 'REGR_SLOPE',\n 'REGR_INTERCEPT',\n 'REGR_COUNT',\n 'REGR_R2',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_SXX',\n 'REGR_SYY',\n 'REGR_SXY',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n\n // CAST is a pretty complex case, involving multiple forms:\n // - CAST(col AS int)\n // - CAST(...) WITH ...\n // - CAST FROM int\n // - CREATE CAST(mycol AS int) WITH ...\n 'CAST',\n\n // Shorthand functions to use in place of CASE expression\n 'COALESCE',\n 'NULLIF',\n\n // Non-standard functions that have widespread support\n 'ROUND',\n 'SIN',\n 'COS',\n 'TAN',\n 'ASIN',\n 'ACOS',\n 'ATAN',\n];\n","export const keywords: string[] = [\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ANY', // <- moved over from functions\n 'ARE',\n 'AS',\n 'ASC', // Not reserved in SQL-2008, but commonly reserved in most dialects\n 'ASENSITIVE',\n 'ASYMMETRIC',\n 'AT',\n 'ATOMIC',\n 'AUTHORIZATION',\n 'BEGIN',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CALLED',\n 'CASCADED',\n 'CAST',\n 'CHECK',\n 'CLOSE',\n 'COALESCE',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'CONDITION',\n 'CONNECT',\n 'CONSTRAINT',\n 'CORRESPONDING',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_CATALOG',\n 'CURRENT_DEFAULT_TRANSFORM_GROUP',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n 'CURRENT_USER',\n 'CURSOR',\n 'CYCLE',\n 'DEALLOCATE',\n 'DAY',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DEREF',\n 'DESC', // Not reserved in SQL-2008, but commonly reserved in most dialects\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISCONNECT',\n 'DISTINCT',\n 'DROP',\n 'DYNAMIC',\n 'EACH',\n 'ELEMENT',\n 'END-EXEC',\n 'ESCAPE',\n 'EVERY', // <- moved over from functions\n 'EXCEPT',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FILTER',\n 'FOR',\n 'FOREIGN',\n 'FREE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GET',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HOLD',\n 'HOUR',\n 'IDENTITY',\n 'IN',\n 'INDICATOR',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'LANGUAGE',\n 'LARGE',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIKE_REGEX',\n 'LOCAL',\n 'MATCH',\n 'MEMBER',\n 'MERGE',\n 'METHOD',\n 'MINUTE',\n 'MODIFIES',\n 'MODULE',\n 'MONTH',\n 'NATURAL',\n 'NEW',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLIF',\n 'OF',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAPS',\n 'PARAMETER',\n 'PARTITION',\n 'PRECISION',\n 'PREPARE',\n 'PRIMARY',\n 'PROCEDURE',\n 'RANGE',\n 'READS',\n 'REAL',\n 'RECURSIVE',\n 'REF',\n 'REFERENCES',\n 'REFERENCING',\n 'RELEASE',\n 'RESULT',\n 'RETURN',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SCOPE',\n 'SCROLL',\n 'SEARCH',\n 'SECOND',\n 'SELECT',\n 'SENSITIVE',\n 'SESSION_USER',\n 'SET',\n 'SIMILAR',\n 'SOME', // <- moved over from functions\n 'SPECIFIC',\n 'SQL',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'START',\n 'STATIC',\n 'SUBMULTISET',\n 'SYMMETRIC',\n 'SYSTEM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TRAILING',\n 'TRANSLATION',\n 'TREAT',\n 'TRIGGER',\n 'TRUE',\n 'UESCAPE',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UPDATE',\n 'USER',\n 'USING',\n 'VALUE',\n 'VALUES',\n 'WHENEVER',\n 'WINDOW',\n 'WITHIN',\n 'WITHOUT',\n 'YEAR',\n];\n\nexport const dataTypes: string[] = [\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_1_data_type\n 'ARRAY',\n 'BIGINT',\n 'BINARY LARGE OBJECT',\n 'BINARY VARYING',\n 'BINARY',\n 'BLOB',\n 'BOOLEAN',\n 'CHAR LARGE OBJECT',\n 'CHAR VARYING',\n 'CHAR',\n 'CHARACTER LARGE OBJECT',\n 'CHARACTER VARYING',\n 'CHARACTER',\n 'CLOB',\n 'DATE',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTEGER',\n 'INTERVAL',\n 'MULTISET',\n 'NATIONAL CHAR VARYING',\n 'NATIONAL CHAR',\n 'NATIONAL CHARACTER LARGE OBJECT',\n 'NATIONAL CHARACTER VARYING',\n 'NATIONAL CHARACTER',\n 'NCHAR LARGE OBJECT',\n 'NCHAR VARYING',\n 'NCHAR',\n 'NCLOB',\n 'NUMERIC',\n 'SMALLINT',\n 'TIME',\n 'TIMESTAMP',\n 'VARBINARY',\n 'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sql.functions.js';\nimport { dataTypes, keywords } from './sql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY] TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [RECURSIVE] VIEW',\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE',\n // - alter table:\n 'ALTER TABLE',\n 'ADD COLUMN',\n 'DROP [COLUMN]',\n 'RENAME COLUMN',\n 'RENAME TO',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n 'ADD SCOPE', // for alter column\n 'DROP SCOPE {CASCADE | RESTRICT}', // for alter column\n 'RESTART WITH', // for alter column\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const sql: DialectOptions = {\n name: 'sql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq-bs\", prefixes: ['N', 'U&'] },\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`, '``'],\n paramTypes: { positional: true },\n operators: ['||'],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://github.com/trinodb/trino/tree/432d2897bdef99388c1a47188743a061c4ac1f34/docs/src/main/sphinx/functions\n // rg '^\\.\\. function::' ./docs/src/main/sphinx/functions | cut -d' ' -f 3 | cut -d '(' -f 1 | sort | uniq\n // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep '\\* :func:' | cut -d'`' -f 2\n // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep -v '\\* :func:'\n // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -e '^- :func:' | cut -d'`' -f2\n // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -ve '^- :func:'\n 'ABS',\n 'ACOS',\n 'ALL_MATCH',\n 'ANY_MATCH',\n 'APPROX_DISTINCT',\n 'APPROX_MOST_FREQUENT',\n 'APPROX_PERCENTILE',\n 'APPROX_SET',\n 'ARBITRARY',\n 'ARRAYS_OVERLAP',\n 'ARRAY_AGG',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_INTERSECT',\n 'ARRAY_JOIN',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_REMOVE',\n 'ARRAY_SORT',\n 'ARRAY_UNION',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AT_TIMEZONE',\n 'AVG',\n 'BAR',\n 'BETA_CDF',\n 'BING_TILE',\n 'BING_TILES_AROUND',\n 'BING_TILE_AT',\n 'BING_TILE_COORDINATES',\n 'BING_TILE_POLYGON',\n 'BING_TILE_QUADKEY',\n 'BING_TILE_ZOOM_LEVEL',\n 'BITWISE_AND',\n 'BITWISE_AND_AGG',\n 'BITWISE_LEFT_SHIFT',\n 'BITWISE_NOT',\n 'BITWISE_OR',\n 'BITWISE_OR_AGG',\n 'BITWISE_RIGHT_SHIFT',\n 'BITWISE_RIGHT_SHIFT_ARITHMETIC',\n 'BITWISE_XOR',\n 'BIT_COUNT',\n 'BOOL_AND',\n 'BOOL_OR',\n 'CARDINALITY',\n 'CAST',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CHAR2HEXINT',\n 'CHECKSUM',\n 'CHR',\n 'CLASSIFY',\n 'COALESCE',\n 'CODEPOINT',\n 'COLOR',\n 'COMBINATIONS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONTAINS',\n 'CONTAINS_SEQUENCE',\n 'CONVEX_HULL_AGG',\n 'CORR',\n 'COS',\n 'COSH',\n 'COSINE_SIMILARITY',\n 'COUNT',\n 'COUNT_IF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CRC32',\n 'CUME_DIST',\n 'CURRENT_CATALOG',\n 'CURRENT_DATE',\n 'CURRENT_GROUPS',\n 'CURRENT_SCHEMA',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_USER',\n 'DATE',\n 'DATE_ADD',\n 'DATE_DIFF',\n 'DATE_FORMAT',\n 'DATE_PARSE',\n 'DATE_TRUNC',\n 'DAY',\n 'DAY_OF_MONTH',\n 'DAY_OF_WEEK',\n 'DAY_OF_YEAR',\n 'DEGREES',\n 'DENSE_RANK',\n 'DOW',\n 'DOY',\n 'E',\n 'ELEMENT_AT',\n 'EMPTY_APPROX_SET',\n 'EVALUATE_CLASSIFIER_PREDICTIONS',\n 'EVERY',\n 'EXP',\n 'EXTRACT',\n 'FEATURES',\n 'FILTER',\n 'FIRST_VALUE',\n 'FLATTEN',\n 'FLOOR',\n 'FORMAT',\n 'FORMAT_DATETIME',\n 'FORMAT_NUMBER',\n 'FROM_BASE',\n 'FROM_BASE32',\n 'FROM_BASE64',\n 'FROM_BASE64URL',\n 'FROM_BIG_ENDIAN_32',\n 'FROM_BIG_ENDIAN_64',\n 'FROM_ENCODED_POLYLINE',\n 'FROM_GEOJSON_GEOMETRY',\n 'FROM_HEX',\n 'FROM_IEEE754_32',\n 'FROM_IEEE754_64',\n 'FROM_ISO8601_DATE',\n 'FROM_ISO8601_TIMESTAMP',\n 'FROM_ISO8601_TIMESTAMP_NANOS',\n 'FROM_UNIXTIME',\n 'FROM_UNIXTIME_NANOS',\n 'FROM_UTF8',\n 'GEOMETRIC_MEAN',\n 'GEOMETRY_FROM_HADOOP_SHAPE',\n 'GEOMETRY_INVALID_REASON',\n 'GEOMETRY_NEAREST_POINTS',\n 'GEOMETRY_TO_BING_TILES',\n 'GEOMETRY_UNION',\n 'GEOMETRY_UNION_AGG',\n 'GREATEST',\n 'GREAT_CIRCLE_DISTANCE',\n 'HAMMING_DISTANCE',\n 'HASH_COUNTS',\n 'HISTOGRAM',\n 'HMAC_MD5',\n 'HMAC_SHA1',\n 'HMAC_SHA256',\n 'HMAC_SHA512',\n 'HOUR',\n 'HUMAN_READABLE_SECONDS',\n 'IF',\n 'INDEX',\n 'INFINITY',\n 'INTERSECTION_CARDINALITY',\n 'INVERSE_BETA_CDF',\n 'INVERSE_NORMAL_CDF',\n 'IS_FINITE',\n 'IS_INFINITE',\n 'IS_JSON_SCALAR',\n 'IS_NAN',\n 'JACCARD_INDEX',\n 'JSON_ARRAY_CONTAINS',\n 'JSON_ARRAY_GET',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_FORMAT',\n 'JSON_PARSE',\n 'JSON_QUERY',\n 'JSON_SIZE',\n 'JSON_VALUE',\n 'KURTOSIS',\n 'LAG',\n 'LAST_DAY_OF_MONTH',\n 'LAST_VALUE',\n 'LEAD',\n 'LEARN_CLASSIFIER',\n 'LEARN_LIBSVM_CLASSIFIER',\n 'LEARN_LIBSVM_REGRESSOR',\n 'LEARN_REGRESSOR',\n 'LEAST',\n 'LENGTH',\n 'LEVENSHTEIN_DISTANCE',\n 'LINE_INTERPOLATE_POINT',\n 'LINE_INTERPOLATE_POINTS',\n 'LINE_LOCATE_POINT',\n 'LISTAGG',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'LUHN_CHECK',\n 'MAKE_SET_DIGEST',\n 'MAP',\n 'MAP_AGG',\n 'MAP_CONCAT',\n 'MAP_ENTRIES',\n 'MAP_FILTER',\n 'MAP_FROM_ENTRIES',\n 'MAP_KEYS',\n 'MAP_UNION',\n 'MAP_VALUES',\n 'MAP_ZIP_WITH',\n 'MAX',\n 'MAX_BY',\n 'MD5',\n 'MERGE',\n 'MERGE_SET_DIGEST',\n 'MILLISECOND',\n 'MIN',\n 'MINUTE',\n 'MIN_BY',\n 'MOD',\n 'MONTH',\n 'MULTIMAP_AGG',\n 'MULTIMAP_FROM_ENTRIES',\n 'MURMUR3',\n 'NAN',\n 'NGRAMS',\n 'NONE_MATCH',\n 'NORMALIZE',\n 'NORMAL_CDF',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NUMERIC_HISTOGRAM',\n 'OBJECTID',\n 'OBJECTID_TIMESTAMP',\n 'PARSE_DATA_SIZE',\n 'PARSE_DATETIME',\n 'PARSE_DURATION',\n 'PERCENT_RANK',\n 'PI',\n 'POSITION',\n 'POW',\n 'POWER',\n 'QDIGEST_AGG',\n 'QUARTER',\n 'RADIANS',\n 'RAND',\n 'RANDOM',\n 'RANK',\n 'REDUCE',\n 'REDUCE_AGG',\n 'REGEXP_COUNT',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_LIKE',\n 'REGEXP_POSITION',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT',\n 'REGRESS',\n 'REGR_INTERCEPT',\n 'REGR_SLOPE',\n 'RENDER',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RGB',\n 'ROUND',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SECOND',\n 'SEQUENCE',\n 'SHA1',\n 'SHA256',\n 'SHA512',\n 'SHUFFLE',\n 'SIGN',\n 'SIMPLIFY_GEOMETRY',\n 'SIN',\n 'SKEWNESS',\n 'SLICE',\n 'SOUNDEX',\n 'SPATIAL_PARTITIONING',\n 'SPATIAL_PARTITIONS',\n 'SPLIT',\n 'SPLIT_PART',\n 'SPLIT_TO_MAP',\n 'SPLIT_TO_MULTIMAP',\n 'SPOOKY_HASH_V2_32',\n 'SPOOKY_HASH_V2_64',\n 'SQRT',\n 'STARTS_WITH',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRPOS',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASTEXT',\n 'ST_BOUNDARY',\n 'ST_BUFFER',\n 'ST_CENTROID',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_COORDDIM',\n 'ST_CROSSES',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_ENVELOPEASPTS',\n 'ST_EQUALS',\n 'ST_EXTERIORRING',\n 'ST_GEOMETRIES',\n 'ST_GEOMETRYFROMTEXT',\n 'ST_GEOMETRYN',\n 'ST_GEOMETRYTYPE',\n 'ST_GEOMFROMBINARY',\n 'ST_INTERIORRINGN',\n 'ST_INTERIORRINGS',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_ISCLOSED',\n 'ST_ISEMPTY',\n 'ST_ISRING',\n 'ST_ISSIMPLE',\n 'ST_ISVALID',\n 'ST_LENGTH',\n 'ST_LINEFROMTEXT',\n 'ST_LINESTRING',\n 'ST_MULTIPOINT',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMINTERIORRING',\n 'ST_NUMPOINTS',\n 'ST_OVERLAPS',\n 'ST_POINT',\n 'ST_POINTN',\n 'ST_POINTS',\n 'ST_POLYGON',\n 'ST_RELATE',\n 'ST_STARTPOINT',\n 'ST_SYMDIFFERENCE',\n 'ST_TOUCHES',\n 'ST_UNION',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_XMAX',\n 'ST_XMIN',\n 'ST_Y',\n 'ST_YMAX',\n 'ST_YMIN',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'TAN',\n 'TANH',\n 'TDIGEST_AGG',\n 'TIMESTAMP_OBJECTID',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO_BASE',\n 'TO_BASE32',\n 'TO_BASE64',\n 'TO_BASE64URL',\n 'TO_BIG_ENDIAN_32',\n 'TO_BIG_ENDIAN_64',\n 'TO_CHAR',\n 'TO_DATE',\n 'TO_ENCODED_POLYLINE',\n 'TO_GEOJSON_GEOMETRY',\n 'TO_GEOMETRY',\n 'TO_HEX',\n 'TO_IEEE754_32',\n 'TO_IEEE754_64',\n 'TO_ISO8601',\n 'TO_MILLISECONDS',\n 'TO_SPHERICAL_GEOGRAPHY',\n 'TO_TIMESTAMP',\n 'TO_UNIXTIME',\n 'TO_UTF8',\n 'TRANSFORM',\n 'TRANSFORM_KEYS',\n 'TRANSFORM_VALUES',\n 'TRANSLATE',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUNCATE',\n 'TRY',\n 'TRY_CAST',\n 'TYPEOF',\n 'UPPER',\n 'URL_DECODE',\n 'URL_ENCODE',\n 'URL_EXTRACT_FRAGMENT',\n 'URL_EXTRACT_HOST',\n 'URL_EXTRACT_PARAMETER',\n 'URL_EXTRACT_PATH',\n 'URL_EXTRACT_PORT',\n 'URL_EXTRACT_PROTOCOL',\n 'URL_EXTRACT_QUERY',\n 'UUID',\n 'VALUES_AT_QUANTILES',\n 'VALUE_AT_QUANTILE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VERSION',\n 'WEEK',\n 'WEEK_OF_YEAR',\n 'WIDTH_BUCKET',\n 'WILSON_INTERVAL_LOWER',\n 'WILSON_INTERVAL_UPPER',\n 'WITH_TIMEZONE',\n 'WORD_STEM',\n 'XXHASH64',\n 'YEAR',\n 'YEAR_OF_WEEK',\n 'YOW',\n 'ZIP',\n 'ZIP_WITH',\n\n // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-recognition-expressions\n 'CLASSIFIER',\n 'FIRST',\n 'LAST',\n 'MATCH_NUMBER',\n 'NEXT',\n 'PERMUTE',\n 'PREV',\n];\n","export const keywords: string[] = [\n // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L858-L1128\n 'ABSENT',\n 'ADD',\n 'ADMIN',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'AS',\n 'ASC',\n 'AT',\n 'AUTHORIZATION',\n 'BERNOULLI',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CATALOGS',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMMITTED',\n 'CONDITIONAL',\n 'CONSTRAINT',\n 'COPARTITION',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'DATA',\n 'DEALLOCATE',\n 'DEFAULT',\n 'DEFINE',\n 'DEFINER',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DOUBLE',\n 'DROP',\n 'ELSE',\n 'EMPTY',\n 'ENCODING',\n 'END',\n 'ERROR',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCLUDING',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FINAL',\n 'FIRST',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'FUNCTIONS',\n 'GRANT',\n 'GRANTED',\n 'GRANTS',\n 'GRAPHVIZ',\n 'GROUP',\n 'GROUPING',\n 'GROUPS',\n 'HAVING',\n 'IGNORE',\n 'IN',\n 'INCLUDING',\n 'INITIAL',\n 'INNER',\n 'INPUT',\n 'INSERT',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'INVOKER',\n 'IO',\n 'IS',\n 'ISOLATION',\n 'JOIN',\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_OBJECT',\n 'KEEP',\n 'KEY',\n 'KEYS',\n 'LAST',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LOCAL',\n 'LOGICAL',\n 'MATCH',\n 'MATCHED',\n 'MATCHES',\n 'MATCH_RECOGNIZE',\n 'MATERIALIZED',\n 'MEASURES',\n 'NATURAL',\n 'NEXT',\n 'NFC',\n 'NFD',\n 'NFKC',\n 'NFKD',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'OBJECT',\n 'OF',\n 'OFFSET',\n 'OMIT',\n 'ON',\n 'ONE',\n 'ONLY',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'ORDINALITY',\n 'OUTER',\n 'OUTPUT',\n 'OVER',\n 'OVERFLOW',\n 'PARTITION',\n 'PARTITIONS',\n 'PASSING',\n 'PAST',\n 'PATH',\n 'PATTERN',\n 'PER',\n 'PERMUTE',\n 'PRECEDING',\n 'PRECISION',\n 'PREPARE',\n 'PRIVILEGES',\n 'PROPERTIES',\n 'PRUNE',\n 'QUOTES',\n 'RANGE',\n 'READ',\n 'RECURSIVE',\n 'REFRESH',\n 'RENAME',\n 'REPEATABLE',\n 'RESET',\n 'RESPECT',\n 'RESTRICT',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLES',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'RUNNING',\n 'SCALAR',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SERIALIZABLE',\n 'SESSION',\n 'SET',\n 'SETS',\n 'SHOW',\n 'SKIP',\n 'SOME',\n 'START',\n 'STATS',\n 'STRING',\n 'SUBSET',\n 'SYSTEM',\n 'TABLE',\n 'TABLES',\n 'TABLESAMPLE',\n 'TEXT',\n 'THEN',\n 'TIES',\n 'TIME',\n 'TIMESTAMP',\n 'TO',\n 'TRAILING',\n 'TRANSACTION',\n 'TRUE',\n 'TYPE',\n 'UESCAPE',\n 'UNBOUNDED',\n 'UNCOMMITTED',\n 'UNCONDITIONAL',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNMATCHED',\n 'UNNEST',\n 'UPDATE',\n 'USE',\n 'USER',\n 'USING',\n 'UTF16',\n 'UTF32',\n 'UTF8',\n 'VALIDATE',\n 'VALUE',\n 'VALUES',\n 'VERBOSE',\n 'VIEW',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WITHOUT',\n 'WORK',\n 'WRAPPER',\n 'WRITE',\n 'ZONE',\n];\n\nexport const dataTypes: string[] = [\n // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168\n // or https://trino.io/docs/current/language/types.html\n 'BIGINT',\n 'INT',\n 'INTEGER',\n 'SMALLINT',\n 'TINYINT',\n 'BOOLEAN',\n 'DATE',\n 'DECIMAL',\n 'REAL',\n 'DOUBLE',\n 'HYPERLOGLOG',\n 'QDIGEST',\n 'TDIGEST',\n 'P4HYPERLOGLOG',\n 'INTERVAL',\n 'TIMESTAMP',\n 'TIME',\n 'VARBINARY',\n 'VARCHAR',\n 'CHAR',\n 'ROW',\n 'ARRAY',\n 'MAP',\n 'JSON',\n 'JSON2016',\n 'IPADDRESS',\n 'GEOMETRY',\n 'UUID',\n 'SETDIGEST',\n 'JONIREGEXP',\n 'RE2JREGEXP',\n 'LIKEPATTERN',\n 'COLOR',\n 'CODEPOINTS',\n 'FUNCTION',\n 'JSONPATH',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './trino.functions.js';\nimport { dataTypes, keywords } from './trino.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L41\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // MATCH_RECOGNIZE\n 'MATCH_RECOGNIZE',\n 'MEASURES',\n 'ONE ROW PER MATCH',\n 'ALL ROWS PER MATCH',\n 'AFTER MATCH',\n 'PATTERN',\n 'SUBSET',\n 'DEFINE',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE TABLE [IF NOT EXISTS]']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [MATERIALIZED] VIEW',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'ADD COLUMN [IF NOT EXISTS]',\n 'DROP COLUMN [IF EXISTS]',\n 'RENAME COLUMN [IF EXISTS]',\n 'RENAME TO',\n 'SET AUTHORIZATION [USER | ROLE]',\n 'SET PROPERTIES',\n 'EXECUTE',\n // - truncate:\n 'TRUNCATE TABLE',\n\n // other\n 'ALTER SCHEMA',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER VIEW',\n 'CREATE SCHEMA',\n 'CREATE ROLE',\n 'DROP SCHEMA',\n 'DROP MATERIALIZED VIEW',\n 'DROP VIEW',\n 'DROP ROLE',\n // Auxiliary\n 'EXPLAIN',\n 'ANALYZE',\n 'EXPLAIN ANALYZE',\n 'EXPLAIN ANALYZE VERBOSE',\n 'USE',\n\n 'DESCRIBE INPUT',\n 'DESCRIBE OUTPUT',\n\n 'REFRESH MATERIALIZED VIEW',\n 'RESET SESSION',\n 'SET SESSION',\n 'SET PATH',\n 'SET TIME ZONE',\n\n 'SHOW GRANTS',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE SCHEMA',\n 'SHOW CREATE VIEW',\n 'SHOW CREATE MATERIALIZED VIEW',\n 'SHOW TABLES',\n 'SHOW SCHEMAS',\n 'SHOW CATALOGS',\n 'SHOW COLUMNS',\n 'SHOW STATS FOR',\n 'SHOW ROLES',\n 'SHOW CURRENT ROLES',\n 'SHOW ROLE GRANTS',\n 'SHOW FUNCTIONS',\n 'SHOW SESSION',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L231-L235\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L288-L291\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L299-L313\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n '{ROWS | RANGE | GROUPS} BETWEEN',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n]);\n\nexport const trino: DialectOptions = {\n name: 'trino',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // Trino also supports {- ... -} parenthesis.\n // The formatting of these currently works out as a result of { and -\n // not getting a space added in-between.\n // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-syntax\n extraParens: ['[]', '{}'],\n // https://trino.io/docs/current/language/types.html#string\n // https://trino.io/docs/current/language/types.html#varbinary\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['U&'] },\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n ],\n // https://trino.io/docs/current/language/reserved.html\n identTypes: ['\"\"-qq'],\n paramTypes: { positional: true },\n operators: [\n '%',\n '->',\n '=>',\n ':',\n '||',\n // Row pattern syntax\n '|',\n '^',\n '$',\n // '?', conflicts with positional placeholders\n ],\n },\n formatOptions: {\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15\n // aggregate\n 'APPROX_COUNT_DISTINCT',\n 'AVG',\n 'CHECKSUM_AGG',\n 'COUNT',\n 'COUNT_BIG',\n 'GROUPING',\n 'GROUPING_ID',\n 'MAX',\n 'MIN',\n 'STDEV',\n 'STDEVP',\n 'SUM',\n 'VAR',\n 'VARP',\n\n // analytic\n 'CUME_DIST',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'Collation - COLLATIONPROPERTY',\n 'Collation - TERTIARY_WEIGHTS',\n\n // configuration\n '@@DBTS',\n '@@LANGID',\n '@@LANGUAGE',\n '@@LOCK_TIMEOUT',\n '@@MAX_CONNECTIONS',\n '@@MAX_PRECISION',\n '@@NESTLEVEL',\n '@@OPTIONS',\n '@@REMSERVER',\n '@@SERVERNAME',\n '@@SERVICENAME',\n '@@SPID',\n '@@TEXTSIZE',\n '@@VERSION',\n\n // conversion\n 'CAST',\n 'CONVERT',\n 'PARSE',\n 'TRY_CAST',\n 'TRY_CONVERT',\n 'TRY_PARSE',\n\n // cryptographic\n 'ASYMKEY_ID',\n 'ASYMKEYPROPERTY',\n 'CERTPROPERTY',\n 'CERT_ID',\n 'CRYPT_GEN_RANDOM',\n 'DECRYPTBYASYMKEY',\n 'DECRYPTBYCERT',\n 'DECRYPTBYKEY',\n 'DECRYPTBYKEYAUTOASYMKEY',\n 'DECRYPTBYKEYAUTOCERT',\n 'DECRYPTBYPASSPHRASE',\n 'ENCRYPTBYASYMKEY',\n 'ENCRYPTBYCERT',\n 'ENCRYPTBYKEY',\n 'ENCRYPTBYPASSPHRASE',\n 'HASHBYTES',\n 'IS_OBJECTSIGNED',\n 'KEY_GUID',\n 'KEY_ID',\n 'KEY_NAME',\n 'SIGNBYASYMKEY',\n 'SIGNBYCERT',\n 'SYMKEYPROPERTY',\n 'VERIFYSIGNEDBYCERT',\n 'VERIFYSIGNEDBYASYMKEY',\n\n // cursor\n '@@CURSOR_ROWS',\n '@@FETCH_STATUS',\n 'CURSOR_STATUS',\n\n // dataType\n 'DATALENGTH',\n 'IDENT_CURRENT',\n 'IDENT_INCR',\n 'IDENT_SEED',\n 'IDENTITY',\n 'SQL_VARIANT_PROPERTY',\n\n // datetime\n '@@DATEFIRST',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_TIMEZONE_ID',\n 'DATEADD',\n 'DATEDIFF',\n 'DATEDIFF_BIG',\n 'DATEFROMPARTS',\n 'DATENAME',\n 'DATEPART',\n 'DATETIME2FROMPARTS',\n 'DATETIMEFROMPARTS',\n 'DATETIMEOFFSETFROMPARTS',\n 'DAY',\n 'EOMONTH',\n 'GETDATE',\n 'GETUTCDATE',\n 'ISDATE',\n 'MONTH',\n 'SMALLDATETIMEFROMPARTS',\n 'SWITCHOFFSET',\n 'SYSDATETIME',\n 'SYSDATETIMEOFFSET',\n 'SYSUTCDATETIME',\n 'TIMEFROMPARTS',\n 'TODATETIMEOFFSET',\n 'YEAR',\n 'JSON',\n 'ISJSON',\n 'JSON_VALUE',\n 'JSON_QUERY',\n 'JSON_MODIFY',\n\n // mathematical\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATN2',\n 'CEILING',\n 'COS',\n 'COT',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LOG',\n 'LOG10',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'SQUARE',\n 'TAN',\n 'CHOOSE',\n 'GREATEST',\n 'IIF',\n 'LEAST',\n\n // metadata\n '@@PROCID',\n 'APP_NAME',\n 'APPLOCK_MODE',\n 'APPLOCK_TEST',\n 'ASSEMBLYPROPERTY',\n 'COL_LENGTH',\n 'COL_NAME',\n 'COLUMNPROPERTY',\n 'DATABASEPROPERTYEX',\n 'DB_ID',\n 'DB_NAME',\n 'FILE_ID',\n 'FILE_IDEX',\n 'FILE_NAME',\n 'FILEGROUP_ID',\n 'FILEGROUP_NAME',\n 'FILEGROUPPROPERTY',\n 'FILEPROPERTY',\n 'FILEPROPERTYEX',\n 'FULLTEXTCATALOGPROPERTY',\n 'FULLTEXTSERVICEPROPERTY',\n 'INDEX_COL',\n 'INDEXKEY_PROPERTY',\n 'INDEXPROPERTY',\n 'NEXT VALUE FOR',\n 'OBJECT_DEFINITION',\n 'OBJECT_ID',\n 'OBJECT_NAME',\n 'OBJECT_SCHEMA_NAME',\n 'OBJECTPROPERTY',\n 'OBJECTPROPERTYEX',\n 'ORIGINAL_DB_NAME',\n 'PARSENAME',\n 'SCHEMA_ID',\n 'SCHEMA_NAME',\n 'SCOPE_IDENTITY',\n 'SERVERPROPERTY',\n 'STATS_DATE',\n 'TYPE_ID',\n 'TYPE_NAME',\n 'TYPEPROPERTY',\n\n // ranking\n 'DENSE_RANK',\n 'NTILE',\n 'RANK',\n 'ROW_NUMBER',\n 'PUBLISHINGSERVERNAME',\n\n // security\n 'CERTENCODED',\n 'CERTPRIVATEKEY',\n 'CURRENT_USER',\n 'DATABASE_PRINCIPAL_ID',\n 'HAS_DBACCESS',\n 'HAS_PERMS_BY_NAME',\n 'IS_MEMBER',\n 'IS_ROLEMEMBER',\n 'IS_SRVROLEMEMBER',\n 'LOGINPROPERTY',\n 'ORIGINAL_LOGIN',\n 'PERMISSIONS',\n 'PWDENCRYPT',\n 'PWDCOMPARE',\n 'SESSION_USER',\n 'SESSIONPROPERTY',\n 'SUSER_ID',\n 'SUSER_NAME',\n 'SUSER_SID',\n 'SUSER_SNAME',\n 'SYSTEM_USER',\n 'USER',\n 'USER_ID',\n 'USER_NAME',\n\n // string\n 'ASCII',\n 'CHARINDEX',\n 'CONCAT',\n 'CONCAT_WS',\n 'DIFFERENCE',\n 'FORMAT',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'LTRIM',\n 'PATINDEX',\n 'QUOTENAME',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RIGHT',\n 'RTRIM',\n 'SOUNDEX',\n 'SPACE',\n 'STR',\n 'STRING_AGG',\n 'STRING_ESCAPE',\n 'STUFF',\n 'SUBSTRING',\n 'TRANSLATE',\n 'TRIM',\n 'UNICODE',\n 'UPPER',\n\n // system\n '$PARTITION',\n '@@ERROR',\n '@@IDENTITY',\n '@@PACK_RECEIVED',\n '@@ROWCOUNT',\n '@@TRANCOUNT',\n 'BINARY_CHECKSUM',\n 'CHECKSUM',\n 'COMPRESS',\n 'CONNECTIONPROPERTY',\n 'CONTEXT_INFO',\n 'CURRENT_REQUEST_ID',\n 'CURRENT_TRANSACTION_ID',\n 'DECOMPRESS',\n 'ERROR_LINE',\n 'ERROR_MESSAGE',\n 'ERROR_NUMBER',\n 'ERROR_PROCEDURE',\n 'ERROR_SEVERITY',\n 'ERROR_STATE',\n 'FORMATMESSAGE',\n 'GET_FILESTREAM_TRANSACTION_CONTEXT',\n 'GETANSINULL',\n 'HOST_ID',\n 'HOST_NAME',\n 'ISNULL',\n 'ISNUMERIC',\n 'MIN_ACTIVE_ROWVERSION',\n 'NEWID',\n 'NEWSEQUENTIALID',\n 'ROWCOUNT_BIG',\n 'SESSION_CONTEXT',\n 'XACT_STATE',\n\n // statistical\n '@@CONNECTIONS',\n '@@CPU_BUSY',\n '@@IDLE',\n '@@IO_BUSY',\n '@@PACK_SENT',\n '@@PACKET_ERRORS',\n '@@TIMETICKS',\n '@@TOTAL_ERRORS',\n '@@TOTAL_READ',\n '@@TOTAL_WRITE',\n 'TEXTPTR',\n 'TEXTVALID',\n\n // trigger\n 'COLUMNS_UPDATED',\n 'EVENTDATA',\n 'TRIGGER_NESTLEVEL',\n 'UPDATE',\n\n // Shorthand functions to use in place of CASE expression\n 'COALESCE',\n 'NULLIF',\n];\n","export const keywords: string[] = [\n // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15\n // standard\n 'ADD',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BEGIN',\n 'BETWEEN',\n 'BREAK',\n 'BROWSE',\n 'BULK',\n 'BY',\n 'CASCADE',\n 'CHECK',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTERED',\n 'COALESCE',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'COMPUTE',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONTAINSTABLE',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DBCC',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DISK',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DROP',\n 'DUMP',\n 'ERRLVL',\n 'ESCAPE',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTERNAL',\n 'FETCH',\n 'FILE',\n 'FILLFACTOR',\n 'FOR',\n 'FOREIGN',\n 'FREETEXT',\n 'FREETEXTTABLE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HOLDLOCK',\n 'IDENTITY',\n 'IDENTITYCOL',\n 'IDENTITY_INSERT',\n 'IF',\n 'IN',\n 'INDEX',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JOIN',\n 'KEY',\n 'KILL',\n 'LEFT',\n 'LIKE',\n 'LINENO',\n 'LOAD',\n 'MERGE',\n 'NOCHECK',\n 'NONCLUSTERED',\n 'NOT',\n 'NULL',\n 'NULLIF',\n 'OF',\n 'OFF',\n 'OFFSETS',\n 'ON',\n 'OPEN',\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVER',\n 'PERCENT',\n 'PIVOT',\n 'PLAN',\n 'PRIMARY',\n 'PRINT',\n 'PROC',\n 'PROCEDURE',\n 'PUBLIC',\n 'RAISERROR',\n 'READ',\n 'READTEXT',\n 'RECONFIGURE',\n 'REFERENCES',\n 'REPLICATION',\n 'RESTORE',\n 'RESTRICT',\n 'RETURN',\n 'REVERT',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROWCOUNT',\n 'ROWGUIDCOL',\n 'RULE',\n 'SAVE',\n 'SCHEMA',\n 'SECURITYAUDIT',\n 'SELECT',\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n 'SESSION_USER',\n 'SET',\n 'SETUSER',\n 'SHUTDOWN',\n 'SOME',\n 'STATISTICS',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'TEXTSIZE',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAN',\n 'TRANSACTION',\n 'TRIGGER',\n 'TRUNCATE',\n 'TRY_CONVERT',\n 'TSEQUAL',\n 'UNION',\n 'UNIQUE',\n 'UNPIVOT',\n 'UPDATE',\n 'UPDATETEXT',\n 'USE',\n 'USER',\n 'VALUES',\n 'VIEW',\n 'WAITFOR',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WITHIN GROUP',\n 'WRITETEXT',\n // https://learn.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-ver16#action\n '$ACTION',\n];\n\nexport const dataTypes: string[] = [\n // https://learn.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15\n 'BINARY',\n 'BIT',\n 'CHAR',\n 'CHAR',\n 'CHARACTER',\n 'DATE',\n 'DATETIME2',\n 'DATETIMEOFFSET',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTEGER',\n 'NATIONAL',\n 'NCHAR',\n 'NUMERIC',\n 'NVARCHAR',\n 'PRECISION',\n 'REAL',\n 'SMALLINT',\n 'TIME',\n 'TIMESTAMP',\n 'VARBINARY',\n 'VARCHAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './transactsql.functions.js';\nimport { dataTypes, keywords } from './transactsql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'INTO',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR {BROWSE | XML | JSON}',\n 'OPTION',\n // Data manipulation\n // - insert:\n 'INSERT [INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [BY TARGET | BY SOURCE] [THEN]',\n 'UPDATE SET',\n // Data definition\n 'CREATE [OR ALTER] {PROC | PROCEDURE}',\n]);\n\nconst standardOnelineClauses = expandPhrases(['CREATE TABLE']);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR ALTER] [MATERIALIZED] VIEW',\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD',\n 'DROP COLUMN [IF EXISTS]',\n 'ALTER COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // indexes\n 'CREATE [UNIQUE] [CLUSTERED] INDEX',\n // other statements\n 'GO',\n // https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15\n 'ADD SENSITIVITY CLASSIFICATION',\n 'ADD SIGNATURE',\n 'AGGREGATE',\n 'ANSI_DEFAULTS',\n 'ANSI_NULLS',\n 'ANSI_NULL_DFLT_OFF',\n 'ANSI_NULL_DFLT_ON',\n 'ANSI_PADDING',\n 'ANSI_WARNINGS',\n 'APPLICATION ROLE',\n 'ARITHABORT',\n 'ARITHIGNORE',\n 'ASSEMBLY',\n 'ASYMMETRIC KEY',\n 'AUTHORIZATION',\n 'AVAILABILITY GROUP',\n 'BACKUP',\n 'BACKUP CERTIFICATE',\n 'BACKUP MASTER KEY',\n 'BACKUP SERVICE MASTER KEY',\n 'BEGIN CONVERSATION TIMER',\n 'BEGIN DIALOG CONVERSATION',\n 'BROKER PRIORITY',\n 'BULK INSERT',\n 'CERTIFICATE',\n 'CLOSE MASTER KEY',\n 'CLOSE SYMMETRIC KEY',\n 'COLLATE',\n 'COLUMN ENCRYPTION KEY',\n 'COLUMN MASTER KEY',\n 'COLUMNSTORE INDEX',\n 'CONCAT_NULL_YIELDS_NULL',\n 'CONTEXT_INFO',\n 'CONTRACT',\n 'CREDENTIAL',\n 'CRYPTOGRAPHIC PROVIDER',\n 'CURSOR_CLOSE_ON_COMMIT',\n 'DATABASE',\n 'DATABASE AUDIT SPECIFICATION',\n 'DATABASE ENCRYPTION KEY',\n 'DATABASE HADR',\n 'DATABASE SCOPED CONFIGURATION',\n 'DATABASE SCOPED CREDENTIAL',\n 'DATABASE SET',\n 'DATEFIRST',\n 'DATEFORMAT',\n 'DEADLOCK_PRIORITY',\n 'DENY',\n 'DENY XML',\n 'DISABLE TRIGGER',\n 'ENABLE TRIGGER',\n 'END CONVERSATION',\n 'ENDPOINT',\n 'EVENT NOTIFICATION',\n 'EVENT SESSION',\n 'EXECUTE AS',\n 'EXTERNAL DATA SOURCE',\n 'EXTERNAL FILE FORMAT',\n 'EXTERNAL LANGUAGE',\n 'EXTERNAL LIBRARY',\n 'EXTERNAL RESOURCE POOL',\n 'EXTERNAL TABLE',\n 'FIPS_FLAGGER',\n 'FMTONLY',\n 'FORCEPLAN',\n 'FULLTEXT CATALOG',\n 'FULLTEXT INDEX',\n 'FULLTEXT STOPLIST',\n 'FUNCTION',\n 'GET CONVERSATION GROUP',\n 'GET_TRANSMISSION_STATUS',\n 'GRANT',\n 'GRANT XML',\n 'IDENTITY_INSERT',\n 'IMPLICIT_TRANSACTIONS',\n 'INDEX',\n 'LANGUAGE',\n 'LOCK_TIMEOUT',\n 'LOGIN',\n 'MASTER KEY',\n 'MESSAGE TYPE',\n 'MOVE CONVERSATION',\n 'NOCOUNT',\n 'NOEXEC',\n 'NUMERIC_ROUNDABORT',\n 'OFFSETS',\n 'OPEN MASTER KEY',\n 'OPEN SYMMETRIC KEY',\n 'PARSEONLY',\n 'PARTITION FUNCTION',\n 'PARTITION SCHEME',\n 'PROCEDURE',\n 'QUERY_GOVERNOR_COST_LIMIT',\n 'QUEUE',\n 'QUOTED_IDENTIFIER',\n 'RECEIVE',\n 'REMOTE SERVICE BINDING',\n 'REMOTE_PROC_TRANSACTIONS',\n 'RESOURCE GOVERNOR',\n 'RESOURCE POOL',\n 'RESTORE',\n 'RESTORE FILELISTONLY',\n 'RESTORE HEADERONLY',\n 'RESTORE LABELONLY',\n 'RESTORE MASTER KEY',\n 'RESTORE REWINDONLY',\n 'RESTORE SERVICE MASTER KEY',\n 'RESTORE VERIFYONLY',\n 'REVERT',\n 'REVOKE',\n 'REVOKE XML',\n 'ROLE',\n 'ROUTE',\n 'ROWCOUNT',\n 'RULE',\n 'SCHEMA',\n 'SEARCH PROPERTY LIST',\n 'SECURITY POLICY',\n 'SELECTIVE XML INDEX',\n 'SEND',\n 'SENSITIVITY CLASSIFICATION',\n 'SEQUENCE',\n 'SERVER AUDIT',\n 'SERVER AUDIT SPECIFICATION',\n 'SERVER CONFIGURATION',\n 'SERVER ROLE',\n 'SERVICE',\n 'SERVICE MASTER KEY',\n 'SETUSER',\n 'SHOWPLAN_ALL',\n 'SHOWPLAN_TEXT',\n 'SHOWPLAN_XML',\n 'SIGNATURE',\n 'SPATIAL INDEX',\n 'STATISTICS',\n 'STATISTICS IO',\n 'STATISTICS PROFILE',\n 'STATISTICS TIME',\n 'STATISTICS XML',\n 'SYMMETRIC KEY',\n 'SYNONYM',\n 'TABLE',\n 'TABLE IDENTITY',\n 'TEXTSIZE',\n 'TRANSACTION ISOLATION LEVEL',\n 'TRIGGER',\n 'TYPE',\n 'UPDATE STATISTICS',\n 'USER',\n 'WORKLOAD GROUP',\n 'XACT_ABORT',\n 'XML INDEX',\n 'XML SCHEMA COLLECTION',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n // non-standard joins\n '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15\nexport const transactsql: DialectOptions = {\n name: 'transactsql',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n nestedBlockComments: true,\n stringTypes: [{ quote: \"''-qq\", prefixes: ['N'] }],\n identTypes: [`\"\"-qq`, '[]'],\n identChars: { first: '#@', rest: '#@$' },\n paramTypes: { named: ['@'], quoted: ['@'] },\n operators: [\n '%',\n '&',\n '|',\n '^',\n '~',\n '!<',\n '!>',\n '+=',\n '-=',\n '*=',\n '/=',\n '%=',\n '|=',\n '&=',\n '^=',\n '::',\n ':',\n ],\n propertyAccessOperators: ['..'],\n // TODO: Support for money constants\n },\n formatOptions: {\n alwaysDenseOperators: ['::'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const keywords: string[] = [\n // List of all keywords taken from:\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/restricted-keywords/list-of-restricted-keywords.html\n // Then filtered down to reserved keywords by running\n // > SELECT * AS ;\n // for each keyword in that list and observing which of these produce an error.\n 'ADD',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'BEFORE',\n 'BETWEEN',\n '_BINARY',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CHANGE',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONDITION',\n 'CONSTRAINT',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATABASES',\n 'DAY_HOUR',\n 'DAY_MICROSECOND',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DECLARE',\n 'DEFAULT',\n 'DELAYED',\n 'DELETE',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DISTINCTROW',\n 'DIV',\n 'DROP',\n 'DUAL',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'ENCLOSED',\n 'ESCAPED',\n 'EXCEPT',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'EXTRA_JOIN',\n 'FALSE',\n 'FETCH',\n 'FOR',\n 'FORCE',\n 'FORCE_COMPILED_MODE',\n 'FORCE_INTERPRETER_MODE',\n 'FOREIGN',\n 'FROM',\n 'FULL',\n 'FULLTEXT',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HEARTBEAT_NO_LOGGING',\n 'HIGH_PRIORITY',\n 'HOUR_MICROSECOND',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IF',\n 'IGNORE',\n 'IN',\n 'INDEX',\n 'INFILE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'IN',\n '_INTERNAL_DYNAMIC_TYPECAST',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'ITERATE',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KILL',\n 'LEADING',\n 'LEAVE',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCK',\n 'LOOP',\n 'LOW_PRIORITY',\n 'MATCH',\n 'MAXVALUE',\n 'MINUS',\n 'MINUTE_MICROSECOND',\n 'MINUTE_SECOND',\n 'MOD',\n 'MODIFIES',\n 'NATURAL',\n 'NO_QUERY_REWRITE',\n 'NOT',\n 'NO_WRITE_TO_BINLOG',\n 'NO_QUERY_REWRITE',\n 'NULL',\n 'ON',\n 'OPTIMIZE',\n 'OPTION',\n 'OPTIONALLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTFILE',\n 'OVER',\n 'PRIMARY',\n 'PROCEDURE',\n 'PURGE',\n 'RANGE',\n 'READ',\n 'READS',\n 'REFERENCES',\n 'REGEXP',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'REPLACE',\n 'REQUIRE',\n 'RESTRICT',\n 'RETURN',\n 'REVOKE',\n 'RIGHT',\n 'RIGHT_ANTI_JOIN',\n 'RIGHT_SEMI_JOIN',\n 'RIGHT_STRAIGHT_JOIN',\n 'RLIKE',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND_MICROSECOND',\n 'SELECT',\n 'SEMI_JOIN',\n 'SENSITIVE',\n 'SEPARATOR',\n 'SET',\n 'SHOW',\n 'SIGNAL',\n 'SPATIAL',\n 'SPECIFIC',\n 'SQL',\n 'SQL_BIG_RESULT',\n 'SQL_BUFFER_RESULT',\n 'SQL_CACHE',\n 'SQL_CALC_FOUND_ROWS',\n 'SQLEXCEPTION',\n 'SQL_NO_CACHE',\n 'SQL_NO_LOGGING',\n 'SQL_SMALL_RESULT',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STRAIGHT_JOIN',\n 'TABLE',\n 'TERMINATED',\n 'THEN',\n 'TO',\n 'TRAILING',\n 'TRIGGER',\n 'TRUE',\n 'UNBOUNDED',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNLOCK',\n 'UPDATE',\n 'USAGE',\n 'USE',\n 'USING',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n '_UTF8',\n 'VALUES',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WRITE',\n 'XOR',\n 'YEAR_MONTH',\n 'ZEROFILL',\n];\n\nexport const dataTypes: string[] = [\n // https://docs.singlestore.com/cloud/reference/sql-reference/data-types/\n 'BIGINT',\n 'BINARY',\n 'BIT',\n 'BLOB',\n 'CHAR',\n 'CHARACTER',\n 'DATETIME',\n 'DEC',\n 'DECIMAL',\n 'DOUBLE PRECISION',\n 'DOUBLE',\n 'ENUM',\n 'FIXED',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'INT',\n 'INT1',\n 'INT2',\n 'INT3',\n 'INT4',\n 'INT8',\n 'INTEGER',\n 'LONG',\n 'LONGBLOB',\n 'LONGTEXT',\n 'MEDIUMBLOB',\n 'MEDIUMINT',\n 'MEDIUMTEXT',\n 'MIDDLEINT',\n 'NATIONAL CHAR',\n 'NATIONAL VARCHAR',\n 'NUMERIC',\n 'PRECISION',\n 'REAL',\n 'SMALLINT',\n 'TEXT',\n 'TIME',\n 'TIMESTAMP',\n 'TINYBLOB',\n 'TINYINT',\n 'TINYTEXT',\n 'UNSIGNED',\n 'VARBINARY',\n 'VARCHAR',\n 'VARCHARACTER',\n 'YEAR',\n];\n","export const functions: string[] = [\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/vector-functions/vector-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/window-functions/window-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/string-functions/string-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/conditional-functions/conditional-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/numeric-functions/numeric-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/geospatial-functions/geospatial-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/json-functions/json-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/information-functions/information-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/aggregate-functions/aggregate-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/time-series-functions/time-series-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/identifier-generation-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/date-and-time-functions/date-and-time-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/distinct-count-estimation-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/full-text-search-functions/full-text-search-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/regular-expression-functions.html\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'ANY_VALUE',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_COUNT_DISTINCT_ACCUMULATE',\n 'APPROX_COUNT_DISTINCT_COMBINE',\n 'APPROX_COUNT_DISTINCT_ESTIMATE',\n 'APPROX_GEOGRAPHY_INTERSECTS',\n 'APPROX_PERCENTILE',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BIN',\n 'BINARY',\n 'BIT_AND',\n 'BIT_COUNT',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAST',\n 'CEIL',\n 'CEILING',\n 'CHAR',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHARSET',\n 'COALESCE',\n 'COERCIBILITY',\n 'COLLATION',\n 'COLLECT',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'COUNT',\n 'CUME_DIST',\n 'CURDATE',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURTIME',\n 'DATABASE',\n 'DATE',\n 'DATE_ADD',\n 'DATEDIFF',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATE_TRUNC',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DECODE',\n 'DEFAULT',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV',\n 'DOT_PRODUCT',\n 'ELT',\n 'EUCLIDEAN_DISTANCE',\n 'EXP',\n 'EXTRACT',\n 'FIELD',\n 'FIRST',\n 'FIRST_VALUE',\n 'FLOOR',\n 'FORMAT',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GEOGRAPHY_AREA',\n 'GEOGRAPHY_CONTAINS',\n 'GEOGRAPHY_DISTANCE',\n 'GEOGRAPHY_INTERSECTS',\n 'GEOGRAPHY_LATITUDE',\n 'GEOGRAPHY_LENGTH',\n 'GEOGRAPHY_LONGITUDE',\n 'GEOGRAPHY_POINT',\n 'GEOGRAPHY_WITHIN_DISTANCE',\n 'GEOMETRY_AREA',\n 'GEOMETRY_CONTAINS',\n 'GEOMETRY_DISTANCE',\n 'GEOMETRY_FILTER',\n 'GEOMETRY_INTERSECTS',\n 'GEOMETRY_LENGTH',\n 'GEOMETRY_POINT',\n 'GEOMETRY_WITHIN_DISTANCE',\n 'GEOMETRY_X',\n 'GEOMETRY_Y',\n 'GREATEST',\n 'GROUPING',\n 'GROUP_CONCAT',\n 'HEX',\n 'HIGHLIGHT',\n 'HOUR',\n 'ICU_VERSION',\n 'IF',\n 'IFNULL',\n 'INET_ATON',\n 'INET_NTOA',\n 'INET6_ATON',\n 'INET6_NTOA',\n 'INITCAP',\n 'INSERT',\n 'INSTR',\n 'INTERVAL',\n 'IS',\n 'IS NULL',\n 'JSON_AGG',\n 'JSON_ARRAY_CONTAINS_DOUBLE',\n 'JSON_ARRAY_CONTAINS_JSON',\n 'JSON_ARRAY_CONTAINS_STRING',\n 'JSON_ARRAY_PUSH_DOUBLE',\n 'JSON_ARRAY_PUSH_JSON',\n 'JSON_ARRAY_PUSH_STRING',\n 'JSON_DELETE_KEY',\n 'JSON_EXTRACT_DOUBLE',\n 'JSON_EXTRACT_JSON',\n 'JSON_EXTRACT_STRING',\n 'JSON_EXTRACT_BIGINT',\n 'JSON_GET_TYPE',\n 'JSON_LENGTH',\n 'JSON_SET_DOUBLE',\n 'JSON_SET_JSON',\n 'JSON_SET_STRING',\n 'JSON_SPLICE_DOUBLE',\n 'JSON_SPLICE_JSON',\n 'JSON_SPLICE_STRING',\n 'LAG',\n 'LAST_DAY',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LIKE',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LPAD',\n 'LTRIM',\n 'MATCH',\n 'MAX',\n 'MD5',\n 'MEDIAN',\n 'MICROSECOND',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'NOT',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'OCTET_LENGTH',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PI',\n 'PIVOT',\n 'POSITION',\n 'POW',\n 'POWER',\n 'QUARTER',\n 'QUOTE',\n 'RADIANS',\n 'RAND',\n 'RANK',\n 'REGEXP',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROUND',\n 'ROW_COUNT',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SCALAR',\n 'SCHEMA',\n 'SEC_TO_TIME',\n 'SHA1',\n 'SHA2',\n 'SIGMOID',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SPLIT',\n 'SOUNDEX',\n 'SOUNDS LIKE',\n 'SOURCE_POS_WAIT',\n 'SPACE',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'SUM',\n 'SYS_GUID',\n 'TAN',\n 'TIME',\n 'TIMEDIFF',\n 'TIME_BUCKET',\n 'TIME_FORMAT',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TIME_TO_SEC',\n 'TO_BASE64',\n 'TO_CHAR',\n 'TO_DAYS',\n 'TO_JSON',\n 'TO_NUMBER',\n 'TO_SECONDS',\n 'TO_TIMESTAMP',\n 'TRIM',\n 'TRUNC',\n 'TRUNCATE',\n 'UCASE',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n // 'USER',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'UUID',\n 'VALUES',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VECTOR_SUB',\n 'VERSION',\n 'WEEK',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'YEAR',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { dataTypes, keywords } from './singlestoredb.keywords.js';\nimport { functions } from './singlestoredb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [IGNORE] [INTO]',\n 'VALUES',\n 'REPLACE [INTO]',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE] [TEMPORARY] PROCEDURE [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [EXTERNAL] FUNCTION',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE VIEW',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER [ONLINE] TABLE',\n 'ADD [COLUMN]',\n 'ADD [UNIQUE] {INDEX | KEY}',\n 'DROP [COLUMN]',\n 'MODIFY [COLUMN]',\n 'CHANGE',\n 'RENAME [TO | AS]',\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference.html\n 'ADD AGGREGATOR',\n 'ADD LEAF',\n 'AGGREGATOR SET AS MASTER',\n 'ALTER DATABASE',\n 'ALTER PIPELINE',\n 'ALTER RESOURCE POOL',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE TABLE',\n 'ATTACH DATABASE',\n 'ATTACH LEAF',\n 'ATTACH LEAF ALL',\n 'BACKUP DATABASE',\n 'BINLOG',\n 'BOOTSTRAP AGGREGATOR',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE',\n 'CHANGE MASTER TO',\n 'CHANGE REPLICATION FILTER',\n 'CHANGE REPLICATION SOURCE TO',\n 'CHECK BLOB CHECKSUM',\n 'CHECK TABLE',\n 'CHECKSUM TABLE',\n 'CLEAR ORPHAN DATABASES',\n 'CLONE',\n 'COMMIT',\n 'CREATE DATABASE',\n 'CREATE GROUP',\n 'CREATE INDEX',\n 'CREATE LINK',\n 'CREATE MILESTONE',\n 'CREATE PIPELINE',\n 'CREATE RESOURCE POOL',\n 'CREATE ROLE',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DETACH DATABASE',\n 'DETACH PIPELINE',\n 'DROP DATABASE',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP LINK',\n 'DROP PIPELINE',\n 'DROP PROCEDURE',\n 'DROP RESOURCE POOL',\n 'DROP ROLE',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'FORCE',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'KILL CONNECTION',\n 'KILLALL QUERIES',\n 'LOAD DATA',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML',\n 'LOCK INSTANCE FOR BACKUP',\n 'LOCK TABLES',\n 'MASTER_POS_WAIT',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'REBALANCE PARTITIONS',\n 'RELEASE SAVEPOINT',\n 'REMOVE AGGREGATOR',\n 'REMOVE LEAF',\n 'REPAIR TABLE',\n 'REPLACE',\n 'REPLICATE DATABASE',\n 'RESET',\n 'RESET MASTER',\n 'RESET PERSIST',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESTART',\n 'RESTORE DATABASE',\n 'RESTORE REDUNDANCY',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET RESOURCE GROUP',\n 'SET ROLE',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW CHARACTER SET',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PIPELINE',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PLUGINS',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA STATUS',\n 'SHOW REPLICAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW STATUS',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHUTDOWN',\n 'SNAPSHOT DATABASE',\n 'SOURCE_POS_WAIT',\n 'START GROUP_REPLICATION',\n 'START PIPELINE',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP GROUP_REPLICATION',\n 'STOP PIPELINE',\n 'STOP REPLICA',\n 'STOP REPLICATING',\n 'STOP SLAVE',\n 'TEST PIPELINE',\n 'UNLOCK INSTANCE',\n 'UNLOCK TABLES',\n 'USE',\n 'XA',\n // flow control\n 'ITERATE',\n 'LEAVE',\n 'LOOP',\n 'REPEAT',\n 'RETURN',\n 'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT',\n 'INTERSECT',\n 'MINUS',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n 'IDENTIFIED BY',\n]);\n\nexport const singlestoredb: DialectOptions = {\n name: 'singlestoredb',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n // TODO: support _binary\"some string\" prefix\n stringTypes: [\n '\"\"-qq-bs',\n \"''-qq-bs\",\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_$]+' },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n lineCommentTypes: ['--', '#'],\n operators: [\n ':=',\n '&',\n '|',\n '^',\n '~',\n '<<',\n '>>',\n '<=>',\n '&&',\n '||',\n '::',\n '::$',\n '::%',\n ':>',\n '!:>',\n '*.*', // Not actually an operator\n ],\n postProcess,\n },\n formatOptions: {\n alwaysDenseOperators: ['::', '::$', '::%'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const functions: string[] = [\n // https://docs.snowflake.com/en/sql-reference-functions.html\n //\n // https://docs.snowflake.com/en/sql-reference/functions-all.html\n // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n // 2. split all lines that contain ',' or '/' into multiple lines\n // 3. remove all '— Deprecated' parts from the strings\n // 4. delete all strings that end with '', they are already covered in the list\n // 5. remove all strings that contain '[', they are operators not functions\n // 6. fix all values that contain '*'\n // 7. delete operatos ':', '::', '||'\n //\n // Steps 1-5 can be combined by the following script in the developer console:\n // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n // .map(x => x.split(x.includes(',') ? ',' : '/')).flat().map(x => x.trim()) // Step 2\n // .map(x => x.replace('— Deprecated', '')) // Step 3\n // .filter(x => !x.endsWith('')) // Step 4\n // .filter(x => !x.includes('[')) // Step 5\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'ADD_MONTHS',\n 'ALL_USER_NAMES',\n 'ANY_VALUE',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_PERCENTILE',\n 'APPROX_PERCENTILE_ACCUMULATE',\n 'APPROX_PERCENTILE_COMBINE',\n 'APPROX_PERCENTILE_ESTIMATE',\n 'APPROX_TOP_K',\n 'APPROX_TOP_K_ACCUMULATE',\n 'APPROX_TOP_K_COMBINE',\n 'APPROX_TOP_K_ESTIMATE',\n 'APPROXIMATE_JACCARD_INDEX',\n 'APPROXIMATE_SIMILARITY',\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_CAT',\n 'ARRAY_COMPACT',\n 'ARRAY_CONSTRUCT',\n 'ARRAY_CONSTRUCT_COMPACT',\n 'ARRAY_CONTAINS',\n 'ARRAY_INSERT',\n 'ARRAY_INTERSECTION',\n 'ARRAY_POSITION',\n 'ARRAY_PREPEND',\n 'ARRAY_SIZE',\n 'ARRAY_SLICE',\n 'ARRAY_TO_STRING',\n 'ARRAY_UNION_AGG',\n 'ARRAY_UNIQUE_AGG',\n 'ARRAYS_OVERLAP',\n 'AS_ARRAY',\n 'AS_BINARY',\n 'AS_BOOLEAN',\n 'AS_CHAR',\n 'AS_VARCHAR',\n 'AS_DATE',\n 'AS_DECIMAL',\n 'AS_NUMBER',\n 'AS_DOUBLE',\n 'AS_REAL',\n 'AS_INTEGER',\n 'AS_OBJECT',\n 'AS_TIME',\n 'AS_TIMESTAMP_LTZ',\n 'AS_TIMESTAMP_NTZ',\n 'AS_TIMESTAMP_TZ',\n 'ASCII',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'AUTO_REFRESH_REGISTRATION_HISTORY',\n 'AUTOMATIC_CLUSTERING_HISTORY',\n 'AVG',\n 'BASE64_DECODE_BINARY',\n 'BASE64_DECODE_STRING',\n 'BASE64_ENCODE',\n 'BIT_LENGTH',\n 'BITAND',\n 'BITAND_AGG',\n 'BITMAP_BIT_POSITION',\n 'BITMAP_BUCKET_NUMBER',\n 'BITMAP_CONSTRUCT_AGG',\n 'BITMAP_COUNT',\n 'BITMAP_OR_AGG',\n 'BITNOT',\n 'BITOR',\n 'BITOR_AGG',\n 'BITSHIFTLEFT',\n 'BITSHIFTRIGHT',\n 'BITXOR',\n 'BITXOR_AGG',\n 'BOOLAND',\n 'BOOLAND_AGG',\n 'BOOLNOT',\n 'BOOLOR',\n 'BOOLOR_AGG',\n 'BOOLXOR',\n 'BOOLXOR_AGG',\n 'BUILD_SCOPED_FILE_URL',\n 'BUILD_STAGE_FILE_URL',\n 'CASE',\n 'CAST',\n 'CBRT',\n 'CEIL',\n 'CHARINDEX',\n 'CHECK_JSON',\n 'CHECK_XML',\n 'CHR',\n 'CHAR',\n 'COALESCE',\n 'COLLATE',\n 'COLLATION',\n 'COMPLETE_TASK_GRAPHS',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONDITIONAL_CHANGE_EVENT',\n 'CONDITIONAL_TRUE_EVENT',\n 'CONTAINS',\n 'CONVERT_TIMEZONE',\n 'COPY_HISTORY',\n 'CORR',\n 'COS',\n 'COSH',\n 'COT',\n 'COUNT',\n 'COUNT_IF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'CURRENT_ACCOUNT',\n 'CURRENT_AVAILABLE_ROLES',\n 'CURRENT_CLIENT',\n 'CURRENT_DATABASE',\n 'CURRENT_DATE',\n 'CURRENT_IP_ADDRESS',\n 'CURRENT_REGION',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_SECONDARY_ROLES',\n 'CURRENT_SESSION',\n 'CURRENT_STATEMENT',\n 'CURRENT_TASK_GRAPHS',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TRANSACTION',\n 'CURRENT_USER',\n 'CURRENT_VERSION',\n 'CURRENT_WAREHOUSE',\n 'DATA_TRANSFER_HISTORY',\n 'DATABASE_REFRESH_HISTORY',\n 'DATABASE_REFRESH_PROGRESS',\n 'DATABASE_REFRESH_PROGRESS_BY_JOB',\n 'DATABASE_STORAGE_USAGE_HISTORY',\n 'DATE_FROM_PARTS',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'DATEADD',\n 'DATEDIFF',\n 'DAYNAME',\n 'DECODE',\n 'DECOMPRESS_BINARY',\n 'DECOMPRESS_STRING',\n 'DECRYPT',\n 'DECRYPT_RAW',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV0',\n 'EDITDISTANCE',\n 'ENCRYPT',\n 'ENCRYPT_RAW',\n 'ENDSWITH',\n 'EQUAL_NULL',\n 'EXP',\n 'EXPLAIN_JSON',\n 'EXTERNAL_FUNCTIONS_HISTORY',\n 'EXTERNAL_TABLE_FILES',\n 'EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY',\n 'EXTRACT',\n 'EXTRACT_SEMANTIC_CATEGORIES',\n 'FACTORIAL',\n 'FILTER',\n 'FIRST_VALUE',\n 'FLATTEN',\n 'FLOOR',\n 'GENERATE_COLUMN_DESCRIPTION',\n 'GENERATOR',\n 'GET',\n 'GET_ABSOLUTE_PATH',\n 'GET_DDL',\n 'GET_IGNORE_CASE',\n 'GET_OBJECT_REFERENCES',\n 'GET_PATH',\n 'GET_PRESIGNED_URL',\n 'GET_RELATIVE_PATH',\n 'GET_STAGE_LOCATION',\n 'GETBIT',\n 'GREATEST',\n 'GREATEST_IGNORE_NULLS',\n 'GROUPING',\n 'GROUPING_ID',\n 'HASH',\n 'HASH_AGG',\n 'HAVERSINE',\n 'HEX_DECODE_BINARY',\n 'HEX_DECODE_STRING',\n 'HEX_ENCODE',\n 'HLL',\n 'HLL_ACCUMULATE',\n 'HLL_COMBINE',\n 'HLL_ESTIMATE',\n 'HLL_EXPORT',\n 'HLL_IMPORT',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n 'IFF',\n 'IFNULL',\n 'ILIKE',\n 'ILIKE ANY',\n 'INFER_SCHEMA',\n 'INITCAP',\n 'INSERT',\n 'INVOKER_ROLE',\n 'INVOKER_SHARE',\n 'IS_ARRAY',\n 'IS_BINARY',\n 'IS_BOOLEAN',\n 'IS_CHAR',\n 'IS_VARCHAR',\n 'IS_DATE',\n 'IS_DATE_VALUE',\n 'IS_DECIMAL',\n 'IS_DOUBLE',\n 'IS_REAL',\n 'IS_GRANTED_TO_INVOKER_ROLE',\n 'IS_INTEGER',\n 'IS_NULL_VALUE',\n 'IS_OBJECT',\n 'IS_ROLE_IN_SESSION',\n 'IS_TIME',\n 'IS_TIMESTAMP_LTZ',\n 'IS_TIMESTAMP_NTZ',\n 'IS_TIMESTAMP_TZ',\n 'JAROWINKLER_SIMILARITY',\n 'JSON_EXTRACT_PATH_TEXT',\n 'KURTOSIS',\n 'LAG',\n 'LAST_DAY',\n 'LAST_QUERY_ID',\n 'LAST_TRANSACTION',\n 'LAST_VALUE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LEN',\n 'LIKE',\n 'LIKE ALL',\n 'LIKE ANY',\n 'LISTAGG',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOG',\n 'LOGIN_HISTORY',\n 'LOGIN_HISTORY_BY_USER',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MATERIALIZED_VIEW_REFRESH_HISTORY',\n 'MD5',\n 'MD5_HEX',\n 'MD5_BINARY',\n 'MD5_NUMBER — Obsoleted',\n 'MD5_NUMBER_LOWER64',\n 'MD5_NUMBER_UPPER64',\n 'MEDIAN',\n 'MIN',\n 'MAX',\n 'MINHASH',\n 'MINHASH_COMBINE',\n 'MOD',\n 'MODE',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'NORMAL',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NULLIFZERO',\n 'NVL',\n 'NVL2',\n 'OBJECT_AGG',\n 'OBJECT_CONSTRUCT',\n 'OBJECT_CONSTRUCT_KEEP_NULL',\n 'OBJECT_DELETE',\n 'OBJECT_INSERT',\n 'OBJECT_KEYS',\n 'OBJECT_PICK',\n 'OCTET_LENGTH',\n 'PARSE_IP',\n 'PARSE_JSON',\n 'PARSE_URL',\n 'PARSE_XML',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PI',\n 'PIPE_USAGE_HISTORY',\n 'POLICY_CONTEXT',\n 'POLICY_REFERENCES',\n 'POSITION',\n 'POW',\n 'POWER',\n 'PREVIOUS_DAY',\n 'QUERY_ACCELERATION_HISTORY',\n 'QUERY_HISTORY',\n 'QUERY_HISTORY_BY_SESSION',\n 'QUERY_HISTORY_BY_USER',\n 'QUERY_HISTORY_BY_WAREHOUSE',\n 'RADIANS',\n 'RANDOM',\n 'RANDSTR',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'REGEXP',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REGEXP_SUBSTR_ALL',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'REGR_VALX',\n 'REGR_VALY',\n 'REPEAT',\n 'REPLACE',\n 'REPLICATION_GROUP_REFRESH_HISTORY',\n 'REPLICATION_GROUP_REFRESH_PROGRESS',\n 'REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB',\n 'REPLICATION_GROUP_USAGE_HISTORY',\n 'REPLICATION_USAGE_HISTORY',\n 'REST_EVENT_HISTORY',\n 'RESULT_SCAN',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROUND',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'RTRIMMED_LENGTH',\n 'SEARCH_OPTIMIZATION_HISTORY',\n 'SEQ1',\n 'SEQ2',\n 'SEQ4',\n 'SEQ8',\n 'SERVERLESS_TASK_HISTORY',\n 'SHA1',\n 'SHA1_HEX',\n 'SHA1_BINARY',\n 'SHA2',\n 'SHA2_HEX',\n 'SHA2_BINARY',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SKEW',\n 'SOUNDEX',\n 'SPACE',\n 'SPLIT',\n 'SPLIT_PART',\n 'SPLIT_TO_TABLE',\n 'SQRT',\n 'SQUARE',\n 'ST_AREA',\n 'ST_ASEWKB',\n 'ST_ASEWKT',\n 'ST_ASGEOJSON',\n 'ST_ASWKB',\n 'ST_ASBINARY',\n 'ST_ASWKT',\n 'ST_ASTEXT',\n 'ST_AZIMUTH',\n 'ST_CENTROID',\n 'ST_COLLECT',\n 'ST_CONTAINS',\n 'ST_COVEREDBY',\n 'ST_COVERS',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DWITHIN',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_GEOGFROMGEOHASH',\n 'ST_GEOGPOINTFROMGEOHASH',\n 'ST_GEOGRAPHYFROMWKB',\n 'ST_GEOGRAPHYFROMWKT',\n 'ST_GEOHASH',\n 'ST_GEOMETRYFROMWKB',\n 'ST_GEOMETRYFROMWKT',\n 'ST_HAUSDORFFDISTANCE',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_LENGTH',\n 'ST_MAKEGEOMPOINT',\n 'ST_GEOM_POINT',\n 'ST_MAKELINE',\n 'ST_MAKEPOINT',\n 'ST_POINT',\n 'ST_MAKEPOLYGON',\n 'ST_POLYGON',\n 'ST_NPOINTS',\n 'ST_NUMPOINTS',\n 'ST_PERIMETER',\n 'ST_POINTN',\n 'ST_SETSRID',\n 'ST_SIMPLIFY',\n 'ST_SRID',\n 'ST_STARTPOINT',\n 'ST_SYMDIFFERENCE',\n 'ST_UNION',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_XMAX',\n 'ST_XMIN',\n 'ST_Y',\n 'ST_YMAX',\n 'ST_YMIN',\n 'STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY',\n 'STAGE_STORAGE_USAGE_HISTORY',\n 'STARTSWITH',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRIP_NULL_VALUE',\n 'STRTOK',\n 'STRTOK_SPLIT_TO_TABLE',\n 'STRTOK_TO_ARRAY',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'SYSDATE',\n 'SYSTEM$ABORT_SESSION',\n 'SYSTEM$ABORT_TRANSACTION',\n 'SYSTEM$AUTHORIZE_PRIVATELINK',\n 'SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS',\n 'SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS',\n 'SYSTEM$CANCEL_ALL_QUERIES',\n 'SYSTEM$CANCEL_QUERY',\n 'SYSTEM$CLUSTERING_DEPTH',\n 'SYSTEM$CLUSTERING_INFORMATION',\n 'SYSTEM$CLUSTERING_RATIO ',\n 'SYSTEM$CURRENT_USER_TASK_NAME',\n 'SYSTEM$DATABASE_REFRESH_HISTORY ',\n 'SYSTEM$DATABASE_REFRESH_PROGRESS',\n 'SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB ',\n 'SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE',\n 'SYSTEM$DISABLE_DATABASE_REPLICATION',\n 'SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE',\n 'SYSTEM$ESTIMATE_QUERY_ACCELERATION',\n 'SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS',\n 'SYSTEM$EXPLAIN_JSON_TO_TEXT',\n 'SYSTEM$EXPLAIN_PLAN_JSON',\n 'SYSTEM$EXTERNAL_TABLE_PIPE_STATUS',\n 'SYSTEM$GENERATE_SAML_CSR',\n 'SYSTEM$GENERATE_SCIM_ACCESS_TOKEN',\n 'SYSTEM$GET_AWS_SNS_IAM_POLICY',\n 'SYSTEM$GET_PREDECESSOR_RETURN_VALUE',\n 'SYSTEM$GET_PRIVATELINK',\n 'SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS',\n 'SYSTEM$GET_PRIVATELINK_CONFIG',\n 'SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO',\n 'SYSTEM$GET_TAG',\n 'SYSTEM$GET_TAG_ALLOWED_VALUES',\n 'SYSTEM$GET_TAG_ON_CURRENT_COLUMN',\n 'SYSTEM$GET_TAG_ON_CURRENT_TABLE',\n 'SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER',\n 'SYSTEM$LAST_CHANGE_COMMIT_TIME',\n 'SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME',\n 'SYSTEM$MIGRATE_SAML_IDP_REGISTRATION',\n 'SYSTEM$PIPE_FORCE_RESUME',\n 'SYSTEM$PIPE_STATUS',\n 'SYSTEM$REVOKE_PRIVATELINK',\n 'SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS',\n 'SYSTEM$SET_RETURN_VALUE',\n 'SYSTEM$SHOW_OAUTH_CLIENT_SECRETS',\n 'SYSTEM$STREAM_GET_TABLE_TIMESTAMP',\n 'SYSTEM$STREAM_HAS_DATA',\n 'SYSTEM$TASK_DEPENDENTS_ENABLE',\n 'SYSTEM$TYPEOF',\n 'SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS',\n 'SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN',\n 'SYSTEM$WAIT',\n 'SYSTEM$WHITELIST',\n 'SYSTEM$WHITELIST_PRIVATELINK',\n 'TAG_REFERENCES',\n 'TAG_REFERENCES_ALL_COLUMNS',\n 'TAG_REFERENCES_WITH_LINEAGE',\n 'TAN',\n 'TANH',\n 'TASK_DEPENDENTS',\n 'TASK_HISTORY',\n 'TIME_FROM_PARTS',\n 'TIME_SLICE',\n 'TIMEADD',\n 'TIMEDIFF',\n 'TIMESTAMP_FROM_PARTS',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TO_ARRAY',\n 'TO_BINARY',\n 'TO_BOOLEAN',\n 'TO_CHAR',\n 'TO_VARCHAR',\n 'TO_DATE',\n 'DATE',\n 'TO_DECIMAL',\n 'TO_NUMBER',\n 'TO_NUMERIC',\n 'TO_DOUBLE',\n 'TO_GEOGRAPHY',\n 'TO_GEOMETRY',\n 'TO_JSON',\n 'TO_OBJECT',\n 'TO_TIME',\n 'TIME',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_LTZ',\n 'TO_TIMESTAMP_NTZ',\n 'TO_TIMESTAMP_TZ',\n 'TO_VARIANT',\n 'TO_XML',\n 'TRANSLATE',\n 'TRIM',\n 'TRUNCATE',\n 'TRUNC',\n 'TRUNC',\n 'TRY_BASE64_DECODE_BINARY',\n 'TRY_BASE64_DECODE_STRING',\n 'TRY_CAST',\n 'TRY_HEX_DECODE_BINARY',\n 'TRY_HEX_DECODE_STRING',\n 'TRY_PARSE_JSON',\n 'TRY_TO_BINARY',\n 'TRY_TO_BOOLEAN',\n 'TRY_TO_DATE',\n 'TRY_TO_DECIMAL',\n 'TRY_TO_NUMBER',\n 'TRY_TO_NUMERIC',\n 'TRY_TO_DOUBLE',\n 'TRY_TO_GEOGRAPHY',\n 'TRY_TO_GEOMETRY',\n 'TRY_TO_TIME',\n 'TRY_TO_TIMESTAMP',\n 'TRY_TO_TIMESTAMP_LTZ',\n 'TRY_TO_TIMESTAMP_NTZ',\n 'TRY_TO_TIMESTAMP_TZ',\n 'TYPEOF',\n 'UNICODE',\n 'UNIFORM',\n 'UPPER',\n 'UUID_STRING',\n 'VALIDATE',\n 'VALIDATE_PIPE_LOAD',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'VARIANCE_SAMP',\n 'VARIANCE_POP',\n 'WAREHOUSE_LOAD_HISTORY',\n 'WAREHOUSE_METERING_HISTORY',\n 'WIDTH_BUCKET',\n 'XMLGET',\n 'YEAR',\n 'YEAROFWEEK',\n 'YEAROFWEEKISO',\n 'DAY',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFWEEKISO',\n 'DAYOFYEAR',\n 'WEEK',\n 'WEEK',\n 'WEEKOFYEAR',\n 'WEEKISO',\n 'MONTH',\n 'QUARTER',\n 'ZEROIFNULL',\n 'ZIPF',\n];\n","export const keywords: string[] = [\n // https://docs.snowflake.com/en/sql-reference/reserved-keywords.html\n //\n // run in console on this page: $x('//tbody/tr/*[1]/p/text()').map(x => x.nodeValue)\n 'ACCOUNT',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'AS',\n 'BETWEEN',\n 'BY',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLUMN',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'DATABASE',\n 'DELETE',\n 'DISTINCT',\n 'DROP',\n 'ELSE',\n 'EXISTS',\n 'FALSE',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'GRANT',\n 'GROUP',\n 'GSCLUSTER',\n 'HAVING',\n 'ILIKE',\n 'IN',\n 'INCREMENT',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISSUE',\n 'JOIN',\n 'LATERAL',\n 'LEFT',\n 'LIKE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'MINUS',\n 'NATURAL',\n 'NOT',\n 'NULL',\n 'OF',\n 'ON',\n 'OR',\n 'ORDER',\n 'ORGANIZATION',\n 'QUALIFY',\n 'REGEXP',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROW',\n 'ROWS',\n 'SAMPLE',\n 'SCHEMA',\n 'SELECT',\n 'SET',\n 'SOME',\n 'START',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TO',\n 'TRIGGER',\n 'TRUE',\n 'TRY_CAST',\n 'UNION',\n 'UNIQUE',\n 'UPDATE',\n 'USING',\n 'VALUES',\n 'VIEW',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WITH',\n\n // These are definitely keywords, but haven't found a definite list in the docs\n 'COMMENT',\n];\n\nexport const dataTypes: string[] = [\n 'NUMBER',\n 'DECIMAL',\n 'NUMERIC',\n 'INT',\n 'INTEGER',\n 'BIGINT',\n 'SMALLINT',\n 'TINYINT',\n 'BYTEINT',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'REAL',\n 'VARCHAR',\n 'CHAR',\n 'CHARACTER',\n 'STRING',\n 'TEXT',\n 'BINARY',\n 'VARBINARY',\n 'BOOLEAN',\n 'DATE',\n 'DATETIME',\n 'TIME',\n 'TIMESTAMP',\n 'TIMESTAMP_LTZ',\n 'TIMESTAMP_NTZ',\n 'TIMESTAMP',\n 'TIMESTAMP_TZ',\n 'VARIANT',\n 'OBJECT',\n 'ARRAY',\n 'GEOGRAPHY',\n 'GEOMETRY',\n];\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './snowflake.functions.js';\nimport { dataTypes, keywords } from './snowflake.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'QUALIFY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH [FIRST | NEXT]',\n // Data manipulation\n // - insert:\n 'INSERT [OVERWRITE] [ALL INTO | INTO | ALL | FIRST]',\n '{THEN | ELSE} INTO',\n 'VALUES',\n // - update:\n 'SET',\n\n 'CLUSTER BY',\n '[WITH] {MASKING POLICY | TAG | ROW ACCESS POLICY}',\n 'COPY GRANTS',\n 'USING TEMPLATE',\n 'MERGE INTO',\n 'WHEN MATCHED [AND]',\n 'THEN {UPDATE SET | DELETE}',\n 'WHEN NOT MATCHED THEN INSERT',\n]);\n\nconst standardOnelineClauses = expandPhrases([\n 'CREATE [OR REPLACE] [VOLATILE] TABLE [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [LOCAL | GLOBAL] {TEMP|TEMPORARY} TABLE [IF NOT EXISTS]',\n]);\n\nconst tabularOnelineClauses = expandPhrases([\n // - create:\n 'CREATE [OR REPLACE] [SECURE] [RECURSIVE] VIEW [IF NOT EXISTS]',\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'RENAME TO',\n 'SWAP WITH',\n '[SUSPEND | RESUME] RECLUSTER',\n 'DROP CLUSTERING KEY',\n 'ADD [COLUMN]',\n 'RENAME COLUMN',\n '{ALTER | MODIFY} [COLUMN]',\n 'DROP [COLUMN]',\n '{ADD | ALTER | MODIFY | DROP} [CONSTRAINT]',\n 'RENAME CONSTRAINT',\n '{ADD | DROP} SEARCH OPTIMIZATION',\n '{SET | UNSET} TAG', // Actually TAG is optional, but that conflicts with UPDATE..SET statement\n '{ADD | DROP} ROW ACCESS POLICY',\n 'DROP ALL ROW ACCESS POLICIES',\n '{SET | DROP} DEFAULT', // for alter column\n '{SET | DROP} NOT NULL', // for alter column\n 'SET DATA TYPE', // for alter column\n 'UNSET COMMENT', // for alter column\n '{SET | UNSET} MASKING POLICY', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE] [IF EXISTS]',\n // other\n // https://docs.snowflake.com/en/sql-reference/sql-all.html\n //\n // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n // 2. delete all lines that contain a sting like '(.*)', they are already covered in the list\n // 3. delete all lines that contain a sting like '<.*>', they are already covered in the list\n // 4. delete all lines that contain '…', they are part of a regex statement that can't be covered here\n // 5. Manually add 'COPY INTO'\n // 6. Remove all lines that are already in `reservedClauses`\n //\n // Steps 1-4 can be combined by the following script in the developer console:\n // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n // filter(x => !x.match(/\\(.*\\)/) && !x.match(/…/) && !x.match(/<.*>/)) // Step 2-4\n 'ALTER ACCOUNT',\n 'ALTER API INTEGRATION',\n 'ALTER CONNECTION',\n 'ALTER DATABASE',\n 'ALTER EXTERNAL TABLE',\n 'ALTER FAILOVER GROUP',\n 'ALTER FILE FORMAT',\n 'ALTER FUNCTION',\n 'ALTER INTEGRATION',\n 'ALTER MASKING POLICY',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER NETWORK POLICY',\n 'ALTER NOTIFICATION INTEGRATION',\n 'ALTER PIPE',\n 'ALTER PROCEDURE',\n 'ALTER REPLICATION GROUP',\n 'ALTER RESOURCE MONITOR',\n 'ALTER ROLE',\n 'ALTER ROW ACCESS POLICY',\n 'ALTER SCHEMA',\n 'ALTER SECURITY INTEGRATION',\n 'ALTER SEQUENCE',\n 'ALTER SESSION',\n 'ALTER SESSION POLICY',\n 'ALTER SHARE',\n 'ALTER STAGE',\n 'ALTER STORAGE INTEGRATION',\n 'ALTER STREAM',\n 'ALTER TAG',\n 'ALTER TASK',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ALTER WAREHOUSE',\n 'BEGIN',\n 'CALL',\n 'COMMIT',\n 'COPY INTO',\n 'CREATE ACCOUNT',\n 'CREATE API INTEGRATION',\n 'CREATE CONNECTION',\n 'CREATE DATABASE',\n 'CREATE EXTERNAL FUNCTION',\n 'CREATE EXTERNAL TABLE',\n 'CREATE FAILOVER GROUP',\n 'CREATE FILE FORMAT',\n 'CREATE FUNCTION',\n 'CREATE INTEGRATION',\n 'CREATE MANAGED ACCOUNT',\n 'CREATE MASKING POLICY',\n 'CREATE MATERIALIZED VIEW',\n 'CREATE NETWORK POLICY',\n 'CREATE NOTIFICATION INTEGRATION',\n 'CREATE PIPE',\n 'CREATE PROCEDURE',\n 'CREATE REPLICATION GROUP',\n 'CREATE RESOURCE MONITOR',\n 'CREATE ROLE',\n 'CREATE ROW ACCESS POLICY',\n 'CREATE SCHEMA',\n 'CREATE SECURITY INTEGRATION',\n 'CREATE SEQUENCE',\n 'CREATE SESSION POLICY',\n 'CREATE SHARE',\n 'CREATE STAGE',\n 'CREATE STORAGE INTEGRATION',\n 'CREATE STREAM',\n 'CREATE TAG',\n 'CREATE TASK',\n 'CREATE USER',\n 'CREATE WAREHOUSE',\n 'DELETE',\n 'DESCRIBE DATABASE',\n 'DESCRIBE EXTERNAL TABLE',\n 'DESCRIBE FILE FORMAT',\n 'DESCRIBE FUNCTION',\n 'DESCRIBE INTEGRATION',\n 'DESCRIBE MASKING POLICY',\n 'DESCRIBE MATERIALIZED VIEW',\n 'DESCRIBE NETWORK POLICY',\n 'DESCRIBE PIPE',\n 'DESCRIBE PROCEDURE',\n 'DESCRIBE RESULT',\n 'DESCRIBE ROW ACCESS POLICY',\n 'DESCRIBE SCHEMA',\n 'DESCRIBE SEQUENCE',\n 'DESCRIBE SESSION POLICY',\n 'DESCRIBE SHARE',\n 'DESCRIBE STAGE',\n 'DESCRIBE STREAM',\n 'DESCRIBE TABLE',\n 'DESCRIBE TASK',\n 'DESCRIBE TRANSACTION',\n 'DESCRIBE USER',\n 'DESCRIBE VIEW',\n 'DESCRIBE WAREHOUSE',\n 'DROP CONNECTION',\n 'DROP DATABASE',\n 'DROP EXTERNAL TABLE',\n 'DROP FAILOVER GROUP',\n 'DROP FILE FORMAT',\n 'DROP FUNCTION',\n 'DROP INTEGRATION',\n 'DROP MANAGED ACCOUNT',\n 'DROP MASKING POLICY',\n 'DROP MATERIALIZED VIEW',\n 'DROP NETWORK POLICY',\n 'DROP PIPE',\n 'DROP PROCEDURE',\n 'DROP REPLICATION GROUP',\n 'DROP RESOURCE MONITOR',\n 'DROP ROLE',\n 'DROP ROW ACCESS POLICY',\n 'DROP SCHEMA',\n 'DROP SEQUENCE',\n 'DROP SESSION POLICY',\n 'DROP SHARE',\n 'DROP STAGE',\n 'DROP STREAM',\n 'DROP TAG',\n 'DROP TASK',\n 'DROP USER',\n 'DROP VIEW',\n 'DROP WAREHOUSE',\n 'EXECUTE IMMEDIATE',\n 'EXECUTE TASK',\n 'EXPLAIN',\n 'GET',\n 'GRANT OWNERSHIP',\n 'GRANT ROLE',\n 'INSERT',\n 'LIST',\n 'MERGE',\n 'PUT',\n 'REMOVE',\n 'REVOKE ROLE',\n 'ROLLBACK',\n 'SHOW COLUMNS',\n 'SHOW CONNECTIONS',\n 'SHOW DATABASES',\n 'SHOW DATABASES IN FAILOVER GROUP',\n 'SHOW DATABASES IN REPLICATION GROUP',\n 'SHOW DELEGATED AUTHORIZATIONS',\n 'SHOW EXTERNAL FUNCTIONS',\n 'SHOW EXTERNAL TABLES',\n 'SHOW FAILOVER GROUPS',\n 'SHOW FILE FORMATS',\n 'SHOW FUNCTIONS',\n 'SHOW GLOBAL ACCOUNTS',\n 'SHOW GRANTS',\n 'SHOW INTEGRATIONS',\n 'SHOW LOCKS',\n 'SHOW MANAGED ACCOUNTS',\n 'SHOW MASKING POLICIES',\n 'SHOW MATERIALIZED VIEWS',\n 'SHOW NETWORK POLICIES',\n 'SHOW OBJECTS',\n 'SHOW ORGANIZATION ACCOUNTS',\n 'SHOW PARAMETERS',\n 'SHOW PIPES',\n 'SHOW PRIMARY KEYS',\n 'SHOW PROCEDURES',\n 'SHOW REGIONS',\n 'SHOW REPLICATION ACCOUNTS',\n 'SHOW REPLICATION DATABASES',\n 'SHOW REPLICATION GROUPS',\n 'SHOW RESOURCE MONITORS',\n 'SHOW ROLES',\n 'SHOW ROW ACCESS POLICIES',\n 'SHOW SCHEMAS',\n 'SHOW SEQUENCES',\n 'SHOW SESSION POLICIES',\n 'SHOW SHARES',\n 'SHOW SHARES IN FAILOVER GROUP',\n 'SHOW SHARES IN REPLICATION GROUP',\n 'SHOW STAGES',\n 'SHOW STREAMS',\n 'SHOW TABLES',\n 'SHOW TAGS',\n 'SHOW TASKS',\n 'SHOW TRANSACTIONS',\n 'SHOW USER FUNCTIONS',\n 'SHOW USERS',\n 'SHOW VARIABLES',\n 'SHOW VIEWS',\n 'SHOW WAREHOUSES',\n 'TRUNCATE MATERIALIZED VIEW',\n 'UNDROP DATABASE',\n 'UNDROP SCHEMA',\n 'UNDROP TABLE',\n 'UNDROP TAG',\n 'UNSET',\n 'USE DATABASE',\n 'USE ROLE',\n 'USE SCHEMA',\n 'USE SECONDARY ROLES',\n 'USE WAREHOUSE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'MINUS', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n '[INNER] JOIN',\n '[NATURAL] {LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{CROSS | NATURAL} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n '{ROWS | RANGE} BETWEEN',\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n]);\n\nexport const snowflake: DialectOptions = {\n name: 'snowflake',\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...standardOnelineClauses, ...tabularOnelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedDataTypes: dataTypes,\n reservedFunctionNames: functions,\n stringTypes: ['$$', `''-qq-bs`],\n identTypes: ['\"\"-qq'],\n variableTypes: [\n // for accessing columns at certain positons in the table\n { regex: '[$][1-9]\\\\d*' },\n // identifier style syntax\n { regex: '[$][_a-zA-Z][_a-zA-Z0-9$]*' },\n ],\n extraParens: ['[]'],\n identChars: { rest: '$' },\n lineCommentTypes: ['--', '//'],\n operators: [\n // Modulo\n '%',\n // Type cast\n '::',\n // String concat\n '||',\n // Generators: https://docs.snowflake.com/en/sql-reference/functions/generator.html#generator\n '=>',\n // Assignment https://docs.snowflake.com/en/sql-reference/snowflake-scripting/let\n ':=',\n // Lambda: https://docs.snowflake.com/en/user-guide/querying-semistructured#lambda-expressions\n '->',\n ],\n propertyAccessOperators: [':'],\n },\n formatOptions: {\n alwaysDenseOperators: ['::'],\n onelineClauses: [...standardOnelineClauses, ...tabularOnelineClauses],\n tabularOnelineClauses,\n },\n};\n","export const dedupe = (arr: string[]) => [...new Set(arr)];\n\n// Last element from array\nexport const last = (arr: T[]): T | undefined => arr[arr.length - 1];\n\n// Sorts strings by length, so that longer ones are first\n// Also sorts alphabetically after sorting by length.\nexport const sortByLengthDesc = (strings: string[]) =>\n strings.sort((a, b) => b.length - a.length || a.localeCompare(b));\n\n/** Get length of longest string in list of strings */\nexport const maxLength = (strings: string[]) =>\n strings.reduce((max, cur) => Math.max(max, cur.length), 0);\n\n// replaces long whitespace sequences with just one space\nexport const equalizeWhitespace = (s: string) => s.replace(/\\s+/gu, ' ');\n\n// True when string contains multiple lines\nexport const isMultiline = (text: string): boolean => /\\n/.test(text);\n\n// Given a type and a field name, returns a type where this field is optional\n//\n// For example, these two type definitions are equivalent:\n//\n// type Foo = Optional<{ foo: string, bar: number }, 'foo'>;\n// type Foo = { foo?: string, bar: number };\n//\nexport type Optional = Pick, K> & Omit;\n","import { PrefixedQuoteType } from './TokenizerOptions.js';\n\n// Escapes regex special chars\nexport const escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n\nexport const WHITESPACE_REGEX = /\\s+/uy;\n\nexport const patternToRegex = (pattern: string): RegExp => new RegExp(`(?:${pattern})`, 'uy');\n\n// Converts \"ab\" to \"[Aa][Bb]\"\nexport const toCaseInsensitivePattern = (prefix: string): string =>\n prefix\n .split('')\n .map(char => (/ /gu.test(char) ? '\\\\s+' : `[${char.toUpperCase()}${char.toLowerCase()}]`))\n .join('');\n\nexport const withDashes = (pattern: string): string => pattern + '(?:-' + pattern + ')*';\n\n// Converts [\"a\", \"b\"] to \"(?:[Aa]|[Bb]|)\" or \"(?:[Aa]|[Bb])\" when required = true\nexport const prefixesPattern = ({ prefixes, requirePrefix }: PrefixedQuoteType): string =>\n `(?:${prefixes.map(toCaseInsensitivePattern).join('|')}${requirePrefix ? '' : '|'})`;\n","import { sortByLengthDesc } from '../utils.js';\n\nimport { IdentChars, QuoteType, VariableType } from './TokenizerOptions.js';\nimport { escapeRegExp, patternToRegex, prefixesPattern, withDashes } from './regexUtil.js';\n\n/**\n * Builds a RegExp for valid line comments in a SQL dialect\n * @param {string[]} lineCommentTypes - list of character strings that denote line comments\n */\nexport const lineComment = (lineCommentTypes: string[]) =>\n new RegExp(`(?:${lineCommentTypes.map(escapeRegExp).join('|')}).*?(?=\\r\\n|\\r|\\n|$)`, 'uy');\n\n/**\n * Builds a RegExp for matching either open- or close-parenthesis patterns\n */\nexport const parenthesis = (kind: 'open' | 'close', extraParens: ('[]' | '{}')[] = []): RegExp => {\n const index = kind === 'open' ? 0 : 1;\n const parens = ['()', ...extraParens].map(pair => pair[index]);\n return patternToRegex(parens.map(escapeRegExp).join('|'));\n};\n\n/**\n * Builds a RegExp containing all operators for a SQL dialect\n */\nexport const operator = (operators: string[]) =>\n patternToRegex(`${sortByLengthDesc(operators).map(escapeRegExp).join('|')}`);\n\n// Negative lookahead to avoid matching a keyword that's actually part of identifier,\n// which can happen when identifier allows word-boundary characters inside it.\n//\n// For example \"SELECT$ME\" should be tokenized as:\n// - [\"SELECT$ME\"] when $ is allowed inside identifiers\n// - [\"SELECT\", \"$\", \"ME\"] when $ can't be part of identifiers.\nconst rejectIdentCharsPattern = ({ rest, dashes }: IdentChars): string =>\n rest || dashes ? `(?![${rest || ''}${dashes ? '-' : ''}])` : '';\n\n/**\n * Builds a RegExp for all Reserved Keywords in a SQL dialect\n */\nexport const reservedWord = (reservedKeywords: string[], identChars: IdentChars = {}): RegExp => {\n if (reservedKeywords.length === 0) {\n return /^\\b$/u;\n }\n\n const avoidIdentChars = rejectIdentCharsPattern(identChars);\n\n const reservedKeywordsPattern = sortByLengthDesc(reservedKeywords)\n .map(escapeRegExp)\n .join('|')\n .replace(/ /gu, '\\\\s+');\n\n return new RegExp(`(?:${reservedKeywordsPattern})${avoidIdentChars}\\\\b`, 'iuy');\n};\n\n/**\n * Builds a RegExp for parameter placeholder patterns\n * @param {string[]} paramTypes - list of strings that denote placeholder types\n * @param {string} pattern - string that denotes placeholder pattern\n */\nexport const parameter = (paramTypes: string[], pattern: string): RegExp | undefined => {\n if (!paramTypes.length) {\n return undefined;\n }\n const typesRegex = paramTypes.map(escapeRegExp).join('|');\n\n return patternToRegex(`(?:${typesRegex})(?:${pattern})`);\n};\n\nconst buildQStringPatterns = () => {\n const specialDelimiterMap = {\n '<': '>',\n '[': ']',\n '(': ')',\n '{': '}',\n };\n\n // base pattern for special delimiters, left must correspond with right\n const singlePattern = \"{left}(?:(?!{right}').)*?{right}\";\n\n // replace {left} and {right} with delimiters, collect as array\n const patternList = Object.entries(specialDelimiterMap).map(([left, right]) =>\n singlePattern.replace(/{left}/g, escapeRegExp(left)).replace(/{right}/g, escapeRegExp(right))\n );\n\n const specialDelimiters = escapeRegExp(Object.keys(specialDelimiterMap).join(''));\n // standard pattern for common delimiters, ignores special delimiters\n const standardDelimiterPattern = String.raw`(?[^\\s${specialDelimiters}])(?:(?!\\k').)*?\\k`;\n\n // constructs final pattern by joining all cases\n const qStringPattern = `[Qq]'(?:${standardDelimiterPattern}|${patternList.join('|')})'`;\n\n return qStringPattern;\n};\n\n// Regex patterns for all supported quote styles.\n//\n// Most of them have a single escaping-style built in,\n// but \"\" and '' support multiple versions of escapes,\n// which must be selected with suffixes: -qq, -bs, -qq-bs, -raw\nexport const quotePatterns = {\n // - backtick quoted (using `` to escape)\n '``': '(?:`[^`]*`)+',\n // - Transact-SQL square bracket quoted (using ]] to escape)\n '[]': String.raw`(?:\\[[^\\]]*\\])(?:\\][^\\]]*\\])*`,\n // double-quoted\n '\"\"-qq': String.raw`(?:\"[^\"]*\")+`, // with repeated quote escapes\n '\"\"-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")`, // with backslash escapes\n '\"\"-qq-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")+`, // with repeated quote or backslash escapes\n '\"\"-raw': String.raw`(?:\"[^\"]*\")`, // no escaping\n // single-quoted\n \"''-qq\": String.raw`(?:'[^']*')+`, // with repeated quote escapes\n \"''-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')`, // with backslash escapes\n \"''-qq-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')+`, // with repeated quote or backslash escapes\n \"''-raw\": String.raw`(?:'[^']*')`, // no escaping\n // PostgreSQL dollar-quoted\n '$$': String.raw`(?\\$\\w*\\$)[\\s\\S]*?\\k`,\n // BigQuery '''triple-quoted''' (using \\' to escape)\n \"'''..'''\": String.raw`'''[^\\\\]*?(?:\\\\.[^\\\\]*?)*?'''`,\n // BigQuery \"\"\"triple-quoted\"\"\" (using \\\" to escape)\n '\"\"\"..\"\"\"': String.raw`\"\"\"[^\\\\]*?(?:\\\\.[^\\\\]*?)*?\"\"\"`,\n // Hive and Spark variables: ${name}\n '{}': String.raw`(?:\\{[^\\}]*\\})`,\n // Oracle q'' strings: q'' q'|text|' ...\n \"q''\": buildQStringPatterns(),\n};\n\nconst singleQuotePattern = (quoteTypes: QuoteType): string => {\n if (typeof quoteTypes === 'string') {\n return quotePatterns[quoteTypes];\n } else if ('regex' in quoteTypes) {\n return quoteTypes.regex;\n } else {\n return prefixesPattern(quoteTypes) + quotePatterns[quoteTypes.quote];\n }\n};\n\n/** Builds a RegExp for matching variables */\nexport const variable = (varTypes: VariableType[]): RegExp =>\n patternToRegex(\n varTypes\n .map(varType => ('regex' in varType ? varType.regex : singleQuotePattern(varType)))\n .join('|')\n );\n\n/** Builds a quote-delimited pattern for matching all given quote types */\nexport const stringPattern = (quoteTypes: QuoteType[]): string =>\n quoteTypes.map(singleQuotePattern).join('|');\n\n/** Builds a RegExp for matching quote-delimited patterns */\nexport const string = (quoteTypes: QuoteType[]): RegExp =>\n patternToRegex(stringPattern(quoteTypes));\n\n/**\n * Builds a RegExp for valid identifiers in a SQL dialect\n */\nexport const identifier = (specialChars: IdentChars = {}): RegExp =>\n patternToRegex(identifierPattern(specialChars));\n\n/**\n * Builds a RegExp string for valid identifiers in a SQL dialect\n */\nexport const identifierPattern = ({\n first,\n rest,\n dashes,\n allowFirstCharNumber,\n}: IdentChars = {}): string => {\n // Unicode letters, diacritical marks and underscore\n const letter = '\\\\p{Alphabetic}\\\\p{Mark}_';\n // Numbers 0..9, plus various unicode numbers\n const number = '\\\\p{Decimal_Number}';\n\n const firstChars = escapeRegExp(first ?? '');\n const restChars = escapeRegExp(rest ?? '');\n\n const pattern = allowFirstCharNumber\n ? `[${letter}${number}${firstChars}][${letter}${number}${restChars}]*`\n : `[${letter}${firstChars}][${letter}${number}${restChars}]*`;\n\n return dashes ? withDashes(pattern) : pattern;\n};\n","/**\n * Determines line and column number of character index in source code.\n */\nexport function lineColFromIndex(source: string, index: number): LineCol {\n const lines = source.slice(0, index).split(/\\n/);\n return { line: lines.length, col: lines[lines.length - 1].length + 1 };\n}\n\nexport interface LineCol {\n line: number;\n col: number;\n}\n","import { Token, TokenType } from './token.js';\nimport { lineColFromIndex } from './lineColFromIndex.js';\nimport { WHITESPACE_REGEX } from './regexUtil.js';\n\nexport interface RegExpLike {\n lastIndex: number;\n exec(input: string): string[] | null;\n}\n\nexport interface TokenRule {\n type: TokenType;\n // Normally a RegExp object.\n // But to allow for more complex matching logic,\n // an object can be given that implements a RegExpLike interface.\n regex: RegExpLike;\n // Called with the raw string that was matched\n text?: (rawText: string) => string;\n key?: (rawText: string) => string;\n}\n\nexport default class TokenizerEngine {\n private input = ''; // The input SQL string to process\n private index = 0; // Current position in string\n\n constructor(private rules: TokenRule[], private dialectName: string) {}\n\n /**\n * Takes a SQL string and breaks it into tokens.\n * Each token is an object with type and value.\n *\n * @param {string} input - The SQL string\n * @returns {Token[]} output token stream\n */\n public tokenize(input: string): Token[] {\n this.input = input;\n this.index = 0;\n const tokens: Token[] = [];\n let token: Token | undefined;\n\n // Keep processing the string until end is reached\n while (this.index < this.input.length) {\n // skip any preceding whitespace\n const precedingWhitespace = this.getWhitespace();\n\n if (this.index < this.input.length) {\n // Get the next token and the token type\n token = this.getNextToken();\n if (!token) {\n throw this.createParseError();\n }\n\n tokens.push({ ...token, precedingWhitespace });\n }\n }\n return tokens;\n }\n\n private createParseError(): Error {\n const text = this.input.slice(this.index, this.index + 10);\n const { line, col } = lineColFromIndex(this.input, this.index);\n return new Error(\n `Parse error: Unexpected \"${text}\" at line ${line} column ${col}.\\n${this.dialectInfo()}`\n );\n }\n\n private dialectInfo(): string {\n if (this.dialectName === 'sql') {\n return (\n `This likely happens because you're using the default \"sql\" dialect.\\n` +\n `If possible, please select a more specific dialect (like sqlite, postgresql, etc).`\n );\n } else {\n return `SQL dialect used: \"${this.dialectName}\".`;\n }\n }\n\n private getWhitespace(): string | undefined {\n WHITESPACE_REGEX.lastIndex = this.index;\n\n const matches = WHITESPACE_REGEX.exec(this.input);\n if (matches) {\n // Advance current position by matched whitespace length\n this.index += matches[0].length;\n return matches[0];\n }\n return undefined;\n }\n\n private getNextToken(): Token | undefined {\n for (const rule of this.rules) {\n const token = this.match(rule);\n if (token) {\n return token;\n }\n }\n return undefined;\n }\n\n // Attempts to match token rule regex at current position in input\n private match(rule: TokenRule): Token | undefined {\n rule.regex.lastIndex = this.index;\n const matches = rule.regex.exec(this.input);\n if (matches) {\n const matchedText = matches[0];\n\n const token: Token = {\n type: rule.type,\n raw: matchedText,\n text: rule.text ? rule.text(matchedText) : matchedText,\n start: this.index,\n };\n\n if (rule.key) {\n token.key = rule.key(matchedText);\n }\n\n // Advance current position by matched token length\n this.index += matchedText.length;\n return token;\n }\n return undefined;\n }\n}\n","/* eslint-disable no-cond-assign */\nimport { RegExpLike } from './TokenizerEngine.js';\n\nconst START = /\\/\\*/uy; // matches: /*\nconst ANY_CHAR = /[\\s\\S]/uy; // matches single character\nconst END = /\\*\\//uy; // matches: */\n\n/**\n * An object mimicking a regular expression,\n * for matching nested block-comments.\n */\nexport class NestedComment implements RegExpLike {\n public lastIndex: number = 0;\n\n public exec(input: string): string[] | null {\n let result = '';\n let match: string | null;\n let nestLevel = 0;\n\n if ((match = this.matchSection(START, input))) {\n result += match;\n nestLevel++;\n } else {\n return null;\n }\n\n while (nestLevel > 0) {\n if ((match = this.matchSection(START, input))) {\n result += match;\n nestLevel++;\n } else if ((match = this.matchSection(END, input))) {\n result += match;\n nestLevel--;\n } else if ((match = this.matchSection(ANY_CHAR, input))) {\n result += match;\n } else {\n return null;\n }\n }\n\n return [result];\n }\n\n private matchSection(regex: RegExp, input: string): string | null {\n regex.lastIndex = this.lastIndex;\n const matches = regex.exec(input);\n if (matches) {\n this.lastIndex += matches[0].length;\n }\n return matches ? matches[0] : null;\n }\n}\n","import { Token, TokenType } from './token.js';\nimport * as regex from './regexFactory.js';\nimport { ParamTypes, TokenizerOptions } from './TokenizerOptions.js';\nimport TokenizerEngine, { TokenRule } from './TokenizerEngine.js';\nimport { escapeRegExp, patternToRegex } from './regexUtil.js';\nimport { equalizeWhitespace, Optional } from '../utils.js';\nimport { NestedComment } from './NestedComment.js';\n\ntype OptionalTokenRule = Optional;\n\nexport default class Tokenizer {\n private rulesBeforeParams: TokenRule[];\n private rulesAfterParams: TokenRule[];\n\n constructor(private cfg: TokenizerOptions, private dialectName: string) {\n this.rulesBeforeParams = this.buildRulesBeforeParams(cfg);\n this.rulesAfterParams = this.buildRulesAfterParams(cfg);\n }\n\n public tokenize(input: string, paramTypesOverrides: ParamTypes): Token[] {\n const rules = [\n ...this.rulesBeforeParams,\n ...this.buildParamRules(this.cfg, paramTypesOverrides),\n ...this.rulesAfterParams,\n ];\n const tokens = new TokenizerEngine(rules, this.dialectName).tokenize(input);\n return this.cfg.postProcess ? this.cfg.postProcess(tokens) : tokens;\n }\n\n // These rules can be cached as they only depend on\n // the Tokenizer config options specified for each SQL dialect\n private buildRulesBeforeParams(cfg: TokenizerOptions): TokenRule[] {\n return this.validRules([\n {\n type: TokenType.BLOCK_COMMENT,\n regex:\n /(\\/\\* *sql-formatter-disable *\\*\\/[\\s\\S]*?(?:\\/\\* *sql-formatter-enable *\\*\\/|$))/uy,\n },\n {\n type: TokenType.BLOCK_COMMENT,\n regex: cfg.nestedBlockComments ? new NestedComment() : /(\\/\\*[^]*?\\*\\/)/uy,\n },\n {\n type: TokenType.LINE_COMMENT,\n regex: regex.lineComment(cfg.lineCommentTypes ?? ['--']),\n },\n {\n type: TokenType.QUOTED_IDENTIFIER,\n regex: regex.string(cfg.identTypes),\n },\n {\n type: TokenType.NUMBER,\n regex:\n /(?:0x[0-9a-fA-F]+|0b[01]+|(?:-\\s*)?(?:[0-9]*\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)(?:[eE][-+]?[0-9]+(?:\\.[0-9]+)?)?)(?![\\w\\p{Alphabetic}])/uy,\n },\n // RESERVED_PHRASE is matched before all other keyword tokens\n // to e.g. prioritize matching \"TIMESTAMP WITH TIME ZONE\" phrase over \"WITH\" clause.\n {\n type: TokenType.RESERVED_PHRASE,\n regex: regex.reservedWord(cfg.reservedPhrases ?? [], cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.CASE,\n regex: /CASE\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.END,\n regex: /END\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.BETWEEN,\n regex: /BETWEEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.LIMIT,\n regex: cfg.reservedClauses.includes('LIMIT') ? /LIMIT\\b/iuy : undefined,\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_CLAUSE,\n regex: regex.reservedWord(cfg.reservedClauses, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_SELECT,\n regex: regex.reservedWord(cfg.reservedSelect, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_SET_OPERATION,\n regex: regex.reservedWord(cfg.reservedSetOperations, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.WHEN,\n regex: /WHEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.ELSE,\n regex: /ELSE\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.THEN,\n regex: /THEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_JOIN,\n regex: regex.reservedWord(cfg.reservedJoins, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.AND,\n regex: /AND\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.OR,\n regex: /OR\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.XOR,\n regex: cfg.supportsXor ? /XOR\\b/iuy : undefined,\n text: toCanonical,\n },\n ...(cfg.operatorKeyword\n ? [\n {\n type: TokenType.OPERATOR,\n regex: /OPERATOR *\\([^)]+\\)/iuy,\n },\n ]\n : []),\n {\n type: TokenType.RESERVED_FUNCTION_NAME,\n regex: regex.reservedWord(cfg.reservedFunctionNames, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_DATA_TYPE,\n regex: regex.reservedWord(cfg.reservedDataTypes, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_KEYWORD,\n regex: regex.reservedWord(cfg.reservedKeywords, cfg.identChars),\n text: toCanonical,\n },\n ]);\n }\n\n // These rules can also be cached as they only depend on\n // the Tokenizer config options specified for each SQL dialect\n private buildRulesAfterParams(cfg: TokenizerOptions): TokenRule[] {\n return this.validRules([\n {\n type: TokenType.VARIABLE,\n regex: cfg.variableTypes ? regex.variable(cfg.variableTypes) : undefined,\n },\n { type: TokenType.STRING, regex: regex.string(cfg.stringTypes) },\n {\n type: TokenType.IDENTIFIER,\n regex: regex.identifier(cfg.identChars),\n },\n { type: TokenType.DELIMITER, regex: /[;]/uy },\n { type: TokenType.COMMA, regex: /[,]/y },\n {\n type: TokenType.OPEN_PAREN,\n regex: regex.parenthesis('open', cfg.extraParens),\n },\n {\n type: TokenType.CLOSE_PAREN,\n regex: regex.parenthesis('close', cfg.extraParens),\n },\n {\n type: TokenType.OPERATOR,\n regex: regex.operator([\n // standard operators\n '+',\n '-',\n '/',\n '>',\n '<',\n '=',\n '<>',\n '<=',\n '>=',\n '!=',\n ...(cfg.operators ?? []),\n ]),\n },\n { type: TokenType.ASTERISK, regex: /[*]/uy },\n {\n type: TokenType.PROPERTY_ACCESS_OPERATOR,\n regex: regex.operator(['.', ...(cfg.propertyAccessOperators ?? [])]),\n },\n ]);\n }\n\n // These rules can't be blindly cached as the paramTypesOverrides object\n // can differ on each invocation of the format() function.\n private buildParamRules(cfg: TokenizerOptions, paramTypesOverrides: ParamTypes): TokenRule[] {\n // Each dialect has its own default parameter types (if any),\n // but these can be overriden by the user of the library.\n const paramTypes = {\n named: paramTypesOverrides?.named || cfg.paramTypes?.named || [],\n quoted: paramTypesOverrides?.quoted || cfg.paramTypes?.quoted || [],\n numbered: paramTypesOverrides?.numbered || cfg.paramTypes?.numbered || [],\n positional:\n typeof paramTypesOverrides?.positional === 'boolean'\n ? paramTypesOverrides.positional\n : cfg.paramTypes?.positional,\n custom: paramTypesOverrides?.custom || cfg.paramTypes?.custom || [],\n };\n\n return this.validRules([\n {\n type: TokenType.NAMED_PARAMETER,\n regex: regex.parameter(\n paramTypes.named,\n regex.identifierPattern(cfg.paramChars || cfg.identChars)\n ),\n key: v => v.slice(1),\n },\n {\n type: TokenType.QUOTED_PARAMETER,\n regex: regex.parameter(paramTypes.quoted, regex.stringPattern(cfg.identTypes)),\n key: v =>\n (({ tokenKey, quoteChar }) =>\n tokenKey.replace(new RegExp(escapeRegExp('\\\\' + quoteChar), 'gu'), quoteChar))({\n tokenKey: v.slice(2, -1),\n quoteChar: v.slice(-1),\n }),\n },\n {\n type: TokenType.NUMBERED_PARAMETER,\n regex: regex.parameter(paramTypes.numbered, '[0-9]+'),\n key: v => v.slice(1),\n },\n {\n type: TokenType.POSITIONAL_PARAMETER,\n regex: paramTypes.positional ? /[?]/y : undefined,\n },\n ...paramTypes.custom.map(\n (customParam): TokenRule => ({\n type: TokenType.CUSTOM_PARAMETER,\n regex: patternToRegex(customParam.regex),\n key: customParam.key ?? (v => v),\n })\n ),\n ]);\n }\n\n // filters out rules for token types whose regex is undefined\n private validRules(rules: OptionalTokenRule[]): TokenRule[] {\n return rules.filter((rule): rule is TokenRule => Boolean(rule.regex));\n }\n}\n\n/**\n * Converts keywords (and keyword sequences) to canonical form:\n * - in uppercase\n * - single spaces between words\n */\nconst toCanonical = (v: string) => equalizeWhitespace(v.toUpperCase());\n","import {\n DialectFormatOptions,\n ProcessedDialectFormatOptions,\n} from './formatter/ExpressionFormatter.js';\nimport Tokenizer from './lexer/Tokenizer.js';\nimport { TokenizerOptions } from './lexer/TokenizerOptions.js';\n\nexport interface DialectOptions {\n name: string;\n tokenizerOptions: TokenizerOptions;\n formatOptions: DialectFormatOptions;\n}\n\nexport interface Dialect {\n tokenizer: Tokenizer;\n formatOptions: ProcessedDialectFormatOptions;\n}\n\nconst cache = new Map();\n\n/**\n * Factory function for building Dialect objects.\n * When called repeatedly with same options object returns the cached Dialect,\n * to avoid the cost of creating it again.\n */\nexport const createDialect = (options: DialectOptions): Dialect => {\n let dialect = cache.get(options);\n if (!dialect) {\n dialect = dialectFromOptions(options);\n cache.set(options, dialect);\n }\n return dialect;\n};\n\nconst dialectFromOptions = (dialectOptions: DialectOptions): Dialect => ({\n tokenizer: new Tokenizer(dialectOptions.tokenizerOptions, dialectOptions.name),\n formatOptions: processDialectFormatOptions(dialectOptions.formatOptions),\n});\n\nconst processDialectFormatOptions = (\n options: DialectFormatOptions\n): ProcessedDialectFormatOptions => ({\n alwaysDenseOperators: options.alwaysDenseOperators || [],\n onelineClauses: Object.fromEntries(options.onelineClauses.map(name => [name, true])),\n tabularOnelineClauses: Object.fromEntries(\n (options.tabularOnelineClauses ?? options.onelineClauses).map(name => [name, true])\n ),\n});\n","import { FormatOptions } from '../FormatOptions.js';\n\n// Utility functions for config options\n\n/**\n * Creates a string to use for one step of indentation.\n */\nexport function indentString(cfg: FormatOptions): string {\n if (cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight') {\n return ' '.repeat(10);\n }\n if (cfg.useTabs) {\n return '\\t';\n }\n return ' '.repeat(cfg.tabWidth);\n}\n\n/**\n * True when indentStyle is one of the tabular ones.\n */\nexport function isTabularStyle(cfg: FormatOptions): boolean {\n return cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight';\n}\n","export type ParamItems = { [k: string]: string };\n\n/**\n * Handles placeholder replacement with given params.\n */\nexport default class Params {\n private params: ParamItems | string[] | undefined;\n private index: number;\n\n constructor(params: ParamItems | string[] | undefined) {\n this.params = params;\n this.index = 0;\n }\n\n /**\n * Returns param value that matches given placeholder with param key.\n */\n public get({ key, text }: { key?: string; text: string }): string {\n if (!this.params) {\n return text;\n }\n\n if (key) {\n return (this.params as ParamItems)[key];\n }\n return (this.params as string[])[this.index++];\n }\n\n /**\n * Returns index of current positional parameter.\n */\n public getPositionalParameterIndex(): number {\n return this.index;\n }\n\n /**\n * Sets index of current positional parameter.\n */\n public setPositionalParameterIndex(i: number) {\n this.index = i;\n }\n}\n","import nearley from 'nearley';\n\nimport Tokenizer from '../lexer/Tokenizer.js';\nimport { disambiguateTokens } from '../lexer/disambiguateTokens.js';\nimport { ParamTypes } from '../lexer/TokenizerOptions.js';\nimport { StatementNode } from './ast.js';\nimport grammar from './grammar.js';\nimport LexerAdapter from './LexerAdapter.js';\nimport { createEofToken } from '../lexer/token.js';\n\nconst { Parser: NearleyParser, Grammar } = nearley;\n\nexport interface Parser {\n parse(sql: string, paramTypesOverrides: ParamTypes): StatementNode[];\n}\n\n/**\n * Creates a parser object which wraps the setup of Nearley parser\n */\nexport function createParser(tokenizer: Tokenizer): Parser {\n let paramTypesOverrides: ParamTypes = {};\n const lexer = new LexerAdapter(chunk => [\n ...disambiguateTokens(tokenizer.tokenize(chunk, paramTypesOverrides)),\n createEofToken(chunk.length),\n ]);\n const parser = new NearleyParser(Grammar.fromCompiled(grammar), { lexer });\n\n return {\n parse: (sql: string, paramTypes: ParamTypes) => {\n // share paramTypesOverrides with Tokenizer\n paramTypesOverrides = paramTypes;\n\n const { results } = parser.feed(sql);\n\n if (results.length === 1) {\n return results[0];\n } else if (results.length === 0) {\n // Ideally we would report a line number where the parser failed,\n // but I haven't found a way to get this info from Nearley :(\n throw new Error('Parse error: Invalid SQL');\n } else {\n throw new Error(`Parse error: Ambiguous grammar\\n${JSON.stringify(results, undefined, 2)}`);\n }\n },\n };\n}\n","import { isReserved, Token, TokenType } from './token.js';\n\n/**\n * Ensures that no keyword token (RESERVED_*) is preceded or followed by a dot (.)\n * or any other property-access operator.\n *\n * Ensures that all RESERVED_FUNCTION_NAME tokens are followed by \"(\".\n * If they're not, converts the token to IDENTIFIER.\n *\n * Converts RESERVED_DATA_TYPE tokens followed by \"(\" to RESERVED_PARAMETERIZED_DATA_TYPE.\n *\n * When IDENTIFIER or RESERVED_DATA_TYPE token is followed by \"[\"\n * converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.\n *\n * This is needed to avoid ambiguity in parser which expects function names\n * to always be followed by open-paren, and to distinguish between\n * array accessor `foo[1]` and array literal `[1, 2, 3]`.\n */\nexport function disambiguateTokens(tokens: Token[]): Token[] {\n return tokens\n .map(propertyNameKeywordToIdent)\n .map(funcNameToIdent)\n .map(dataTypeToParameterizedDataType)\n .map(identToArrayIdent)\n .map(dataTypeToArrayKeyword);\n}\n\nconst propertyNameKeywordToIdent = (token: Token, i: number, tokens: Token[]): Token => {\n if (isReserved(token.type)) {\n const prevToken = prevNonCommentToken(tokens, i);\n if (prevToken && prevToken.type === TokenType.PROPERTY_ACCESS_OPERATOR) {\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && nextToken.type === TokenType.PROPERTY_ACCESS_OPERATOR) {\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n }\n return token;\n};\n\nconst funcNameToIdent = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.RESERVED_FUNCTION_NAME) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (!nextToken || !isOpenParen(nextToken)) {\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n }\n return token;\n};\n\nconst dataTypeToParameterizedDataType = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.RESERVED_DATA_TYPE) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && isOpenParen(nextToken)) {\n return { ...token, type: TokenType.RESERVED_PARAMETERIZED_DATA_TYPE };\n }\n }\n return token;\n};\n\nconst identToArrayIdent = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.IDENTIFIER) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && isOpenBracket(nextToken)) {\n return { ...token, type: TokenType.ARRAY_IDENTIFIER };\n }\n }\n return token;\n};\n\nconst dataTypeToArrayKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.RESERVED_DATA_TYPE) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && isOpenBracket(nextToken)) {\n return { ...token, type: TokenType.ARRAY_KEYWORD };\n }\n }\n return token;\n};\n\nconst prevNonCommentToken = (tokens: Token[], index: number): Token | undefined =>\n nextNonCommentToken(tokens, index, -1);\n\nconst nextNonCommentToken = (\n tokens: Token[],\n index: number,\n dir: -1 | 1 = 1\n): Token | undefined => {\n let i = 1;\n while (tokens[index + i * dir] && isComment(tokens[index + i * dir])) {\n i++;\n }\n return tokens[index + i * dir];\n};\n\nconst isOpenParen = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '(';\n\nconst isOpenBracket = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '[';\n\nconst isComment = (t: Token): boolean =>\n t.type === TokenType.BLOCK_COMMENT || t.type === TokenType.LINE_COMMENT;\n","import { lineColFromIndex } from '../lexer/lineColFromIndex.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// Nearly type definitions say that Token must have a value field,\n// which however is wrong. Instead Nearley expects a text field.\ntype NearleyToken = Token & { value: string };\n\nexport default class LexerAdapter {\n private index = 0;\n private tokens: Token[] = [];\n private input = '';\n\n constructor(private tokenize: (chunk: string) => Token[]) {}\n\n reset(chunk: string, _info: any) {\n this.input = chunk;\n this.index = 0;\n this.tokens = this.tokenize(chunk);\n }\n\n next(): NearleyToken | undefined {\n return this.tokens[this.index++] as NearleyToken | undefined;\n }\n\n save(): any {}\n\n formatError(token: NearleyToken) {\n const { line, col } = lineColFromIndex(this.input, token.start);\n return `Parse error at token: ${token.text} at line ${line} column ${col}`;\n }\n\n has(name: string): boolean {\n return name in TokenType;\n }\n}\n","// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n// Bypasses TS6133. Allow declared but unused functions.\n// @ts-ignore\nfunction id(d: any[]): any { return d[0]; }\ndeclare var DELIMITER: any;\ndeclare var EOF: any;\ndeclare var LIMIT: any;\ndeclare var COMMA: any;\ndeclare var RESERVED_SELECT: any;\ndeclare var ASTERISK: any;\ndeclare var RESERVED_CLAUSE: any;\ndeclare var RESERVED_SET_OPERATION: any;\ndeclare var ARRAY_IDENTIFIER: any;\ndeclare var ARRAY_KEYWORD: any;\ndeclare var RESERVED_FUNCTION_NAME: any;\ndeclare var PROPERTY_ACCESS_OPERATOR: any;\ndeclare var BETWEEN: any;\ndeclare var AND: any;\ndeclare var CASE: any;\ndeclare var END: any;\ndeclare var WHEN: any;\ndeclare var THEN: any;\ndeclare var ELSE: any;\ndeclare var OPERATOR: any;\ndeclare var IDENTIFIER: any;\ndeclare var QUOTED_IDENTIFIER: any;\ndeclare var VARIABLE: any;\ndeclare var NAMED_PARAMETER: any;\ndeclare var QUOTED_PARAMETER: any;\ndeclare var NUMBERED_PARAMETER: any;\ndeclare var POSITIONAL_PARAMETER: any;\ndeclare var CUSTOM_PARAMETER: any;\ndeclare var NUMBER: any;\ndeclare var STRING: any;\ndeclare var RESERVED_KEYWORD: any;\ndeclare var RESERVED_PHRASE: any;\ndeclare var RESERVED_JOIN: any;\ndeclare var RESERVED_DATA_TYPE: any;\ndeclare var RESERVED_PARAMETERIZED_DATA_TYPE: any;\ndeclare var OR: any;\ndeclare var XOR: any;\ndeclare var LINE_COMMENT: any;\ndeclare var BLOCK_COMMENT: any;\ndeclare var DISABLE_COMMENT: any;\n\nimport LexerAdapter from './LexerAdapter.js';\nimport { NodeType, AstNode, CommentNode, KeywordNode, IdentifierNode, DataTypeNode } from './ast.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// The lexer here is only to provide the has() method,\n// that's used inside the generated grammar definition.\n// A proper lexer gets passed to Nearley Parser constructor.\nconst lexer = new LexerAdapter(chunk => []);\n\n// Used for unwrapping grammar rules like:\n//\n// rule -> ( foo | bar | baz )\n//\n// which otherwise produce single element nested inside two arrays\nconst unwrap = ([[el]]: T[][]): T => el;\n\nconst toKeywordNode = (token: Token): KeywordNode => ({\n type: NodeType.keyword,\n tokenType: token.type,\n text: token.text,\n raw: token.raw,\n});\n\nconst toDataTypeNode = (token: Token): DataTypeNode => ({\n type: NodeType.data_type,\n text: token.text,\n raw: token.raw,\n});\n\ninterface CommentAttachments {\n leading?: CommentNode[];\n trailing?: CommentNode[];\n}\n\nconst addComments = (node: AstNode, { leading, trailing }: CommentAttachments): AstNode => {\n if (leading?.length) {\n node = { ...node, leadingComments: leading };\n }\n if (trailing?.length) {\n node = { ...node, trailingComments: trailing };\n }\n return node;\n};\n\nconst addCommentsToArray = (nodes: AstNode[], { leading, trailing }: CommentAttachments): AstNode[] => {\n if (leading?.length) {\n const [first, ...rest] = nodes;\n nodes = [addComments(first, { leading }), ...rest];\n }\n if (trailing?.length) {\n const lead = nodes.slice(0, -1);\n const last = nodes[nodes.length-1];\n nodes = [...lead, addComments(last, { trailing })];\n }\n return nodes;\n};\n\n\ninterface NearleyToken {\n value: any;\n [key: string]: any;\n};\n\ninterface NearleyLexer {\n reset: (chunk: string, info: any) => void;\n next: () => NearleyToken | undefined;\n save: () => any;\n formatError: (token: never) => string;\n has: (tokenType: string) => boolean;\n};\n\ninterface NearleyRule {\n name: string;\n symbols: NearleySymbol[];\n postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n};\n\ntype NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n\ninterface Grammar {\n Lexer: NearleyLexer | undefined;\n ParserRules: NearleyRule[];\n ParserStart: string;\n};\n\nconst grammar: Grammar = {\n Lexer: lexer,\n ParserRules: [\n {\"name\": \"main$ebnf$1\", \"symbols\": []},\n {\"name\": \"main$ebnf$1\", \"symbols\": [\"main$ebnf$1\", \"statement\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"main\", \"symbols\": [\"main$ebnf$1\"], \"postprocess\": \n ([statements]) => {\n const last = statements[statements.length - 1];\n if (last && !last.hasSemicolon) {\n // we have fully parsed the whole file\n // discard the last statement when it's empty\n return last.children.length > 0 ? statements : statements.slice(0, -1);\n } else {\n // parsing still in progress, do nothing\n return statements;\n }\n }\n },\n {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"DELIMITER\") ? {type: \"DELIMITER\"} : DELIMITER)]},\n {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"EOF\") ? {type: \"EOF\"} : EOF)]},\n {\"name\": \"statement\", \"symbols\": [\"expressions_or_clauses\", \"statement$subexpression$1\"], \"postprocess\": \n ([children, [delimiter]]) => ({\n type: NodeType.statement,\n children,\n hasSemicolon: delimiter.type === TokenType.DELIMITER,\n })\n },\n {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": []},\n {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": []},\n {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": [\"expressions_or_clauses$ebnf$2\", \"clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expressions_or_clauses\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"expressions_or_clauses$ebnf$2\"], \"postprocess\": \n ([expressions, clauses]) => [...expressions, ...clauses]\n },\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"limit_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"select_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"other_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"set_operation\"]},\n {\"name\": \"clause\", \"symbols\": [\"clause$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"free_form_sql\"]},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA), \"limit_clause$ebnf$1$subexpression$1$ebnf$1\"]},\n {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1\"], \"postprocess\": id},\n {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n {\"name\": \"limit_clause\", \"symbols\": [(lexer.has(\"LIMIT\") ? {type: \"LIMIT\"} : LIMIT), \"_\", \"expression_chain_\", \"limit_clause$ebnf$1\"], \"postprocess\": \n ([limitToken, _, exp1, optional]) => {\n if (optional) {\n const [comma, exp2] = optional;\n return {\n type: NodeType.limit_clause,\n limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n offset: exp1,\n count: exp2,\n };\n } else {\n return {\n type: NodeType.limit_clause,\n limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n count: exp1,\n };\n }\n }\n },\n {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": []},\n {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": [\"select_clause$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"all_columns_asterisk\", \"select_clause$subexpression$1$ebnf$1\"]},\n {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": []},\n {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": [\"select_clause$subexpression$1$ebnf$2\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\", \"select_clause$subexpression$1$ebnf$2\"]},\n {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT), \"select_clause$subexpression$1\"], \"postprocess\": \n ([nameToken, [exp, expressions]]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children: [exp, ...expressions],\n })\n },\n {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT)], \"postprocess\": \n ([nameToken]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children: [],\n })\n },\n {\"name\": \"all_columns_asterisk\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)], \"postprocess\": \n () => ({ type: NodeType.all_columns_asterisk })\n },\n {\"name\": \"other_clause$ebnf$1\", \"symbols\": []},\n {\"name\": \"other_clause$ebnf$1\", \"symbols\": [\"other_clause$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"other_clause\", \"symbols\": [(lexer.has(\"RESERVED_CLAUSE\") ? {type: \"RESERVED_CLAUSE\"} : RESERVED_CLAUSE), \"other_clause$ebnf$1\"], \"postprocess\": \n ([nameToken, children]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children,\n })\n },\n {\"name\": \"set_operation$ebnf$1\", \"symbols\": []},\n {\"name\": \"set_operation$ebnf$1\", \"symbols\": [\"set_operation$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"set_operation\", \"symbols\": [(lexer.has(\"RESERVED_SET_OPERATION\") ? {type: \"RESERVED_SET_OPERATION\"} : RESERVED_SET_OPERATION), \"set_operation$ebnf$1\"], \"postprocess\": \n ([nameToken, children]) => ({\n type: NodeType.set_operation,\n nameKw: toKeywordNode(nameToken),\n children,\n })\n },\n {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_with_comments_\"]},\n {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_chain_$ebnf$1\", \"expression_with_comments_\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expression_chain_\", \"symbols\": [\"expression_chain_$ebnf$1\"], \"postprocess\": id},\n {\"name\": \"expression_chain$ebnf$1\", \"symbols\": []},\n {\"name\": \"expression_chain$ebnf$1\", \"symbols\": [\"expression_chain$ebnf$1\", \"_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expression_chain\", \"symbols\": [\"expression\", \"expression_chain$ebnf$1\"], \"postprocess\": \n ([expr, chain]) => [expr, ...chain]\n },\n {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": []},\n {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": [\"andless_expression_chain$ebnf$1\", \"_andless_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"andless_expression_chain\", \"symbols\": [\"andless_expression\", \"andless_expression_chain$ebnf$1\"], \"postprocess\": \n ([expr, chain]) => [expr, ...chain]\n },\n {\"name\": \"expression_with_comments_\", \"symbols\": [\"expression\", \"_\"], \"postprocess\": \n ([expr, _]) => addComments(expr, { trailing: _ })\n },\n {\"name\": \"_expression_with_comments\", \"symbols\": [\"_\", \"expression\"], \"postprocess\": \n ([_, expr]) => addComments(expr, { leading: _ })\n },\n {\"name\": \"_andless_expression_with_comments\", \"symbols\": [\"_\", \"andless_expression\"], \"postprocess\": \n ([_, expr]) => addComments(expr, { leading: _ })\n },\n {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\"]},\n {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asterisk\"]},\n {\"name\": \"free_form_sql\", \"symbols\": [\"free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comma\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comment\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"other_keyword\"]},\n {\"name\": \"asteriskless_free_form_sql\", \"symbols\": [\"asteriskless_free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"expression$subexpression$1\", \"symbols\": [\"andless_expression\"]},\n {\"name\": \"expression$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n {\"name\": \"expression\", \"symbols\": [\"expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asterisk\"]},\n {\"name\": \"andless_expression\", \"symbols\": [\"andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"atomic_expression\"]},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"between_predicate\"]},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"case_expression\"]},\n {\"name\": \"asteriskless_andless_expression\", \"symbols\": [\"asteriskless_andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"function_call\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"property_access\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parenthesis\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"curly_braces\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"square_brackets\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"operator\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"identifier\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parameter\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"literal\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"data_type\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"keyword\"]},\n {\"name\": \"atomic_expression\", \"symbols\": [\"atomic_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_IDENTIFIER\") ? {type: \"ARRAY_IDENTIFIER\"} : ARRAY_IDENTIFIER), \"_\", \"square_brackets\"], \"postprocess\": \n ([arrayToken, _, brackets]) => ({\n type: NodeType.array_subscript,\n array: addComments({ type: NodeType.identifier, quoted: false, text: arrayToken.text}, { trailing: _ }),\n parenthesis: brackets,\n })\n },\n {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_KEYWORD\") ? {type: \"ARRAY_KEYWORD\"} : ARRAY_KEYWORD), \"_\", \"square_brackets\"], \"postprocess\": \n ([arrayToken, _, brackets]) => ({\n type: NodeType.array_subscript,\n array: addComments(toKeywordNode(arrayToken), { trailing: _ }),\n parenthesis: brackets,\n })\n },\n {\"name\": \"function_call\", \"symbols\": [(lexer.has(\"RESERVED_FUNCTION_NAME\") ? {type: \"RESERVED_FUNCTION_NAME\"} : RESERVED_FUNCTION_NAME), \"_\", \"parenthesis\"], \"postprocess\": \n ([nameToken, _, parens]) => ({\n type: NodeType.function_call,\n nameKw: addComments(toKeywordNode(nameToken), { trailing: _ }),\n parenthesis: parens,\n })\n },\n {\"name\": \"parenthesis\", \"symbols\": [{\"literal\":\"(\"}, \"expressions_or_clauses\", {\"literal\":\")\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"(\",\n closeParen: \")\",\n })\n },\n {\"name\": \"curly_braces$ebnf$1\", \"symbols\": []},\n {\"name\": \"curly_braces$ebnf$1\", \"symbols\": [\"curly_braces$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"curly_braces\", \"symbols\": [{\"literal\":\"{\"}, \"curly_braces$ebnf$1\", {\"literal\":\"}\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"{\",\n closeParen: \"}\",\n })\n },\n {\"name\": \"square_brackets$ebnf$1\", \"symbols\": []},\n {\"name\": \"square_brackets$ebnf$1\", \"symbols\": [\"square_brackets$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"square_brackets\", \"symbols\": [{\"literal\":\"[\"}, \"square_brackets$ebnf$1\", {\"literal\":\"]\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"[\",\n closeParen: \"]\",\n })\n },\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"identifier\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"all_columns_asterisk\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"parameter\"]},\n {\"name\": \"property_access\", \"symbols\": [\"atomic_expression\", \"_\", (lexer.has(\"PROPERTY_ACCESS_OPERATOR\") ? {type: \"PROPERTY_ACCESS_OPERATOR\"} : PROPERTY_ACCESS_OPERATOR), \"_\", \"property_access$subexpression$1\"], \"postprocess\": \n // Allowing property to be is currently a hack.\n // A better way would be to allow on the left side of array_subscript,\n // but we currently can't do that because of another hack that requires\n // %ARRAY_IDENTIFIER on the left side of .\n ([object, _1, dot, _2, [property]]) => {\n return {\n type: NodeType.property_access,\n object: addComments(object, { trailing: _1 }),\n operator: dot.text,\n property: addComments(property, { leading: _2 }),\n };\n }\n },\n {\"name\": \"between_predicate\", \"symbols\": [(lexer.has(\"BETWEEN\") ? {type: \"BETWEEN\"} : BETWEEN), \"_\", \"andless_expression_chain\", \"_\", (lexer.has(\"AND\") ? {type: \"AND\"} : AND), \"_\", \"andless_expression\"], \"postprocess\": \n ([betweenToken, _1, expr1, _2, andToken, _3, expr2]) => ({\n type: NodeType.between_predicate,\n betweenKw: toKeywordNode(betweenToken),\n expr1: addCommentsToArray(expr1, { leading: _1, trailing: _2 }),\n andKw: toKeywordNode(andToken),\n expr2: [addComments(expr2, { leading: _3 })],\n })\n },\n {\"name\": \"case_expression$ebnf$1\", \"symbols\": [\"expression_chain_\"], \"postprocess\": id},\n {\"name\": \"case_expression$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n {\"name\": \"case_expression$ebnf$2\", \"symbols\": []},\n {\"name\": \"case_expression$ebnf$2\", \"symbols\": [\"case_expression$ebnf$2\", \"case_clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"case_expression\", \"symbols\": [(lexer.has(\"CASE\") ? {type: \"CASE\"} : CASE), \"_\", \"case_expression$ebnf$1\", \"case_expression$ebnf$2\", (lexer.has(\"END\") ? {type: \"END\"} : END)], \"postprocess\": \n ([caseToken, _, expr, clauses, endToken]) => ({\n type: NodeType.case_expression,\n caseKw: addComments(toKeywordNode(caseToken), { trailing: _ }),\n endKw: toKeywordNode(endToken),\n expr: expr || [],\n clauses,\n })\n },\n {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN), \"_\", \"expression_chain_\", (lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN), \"_\", \"expression_chain_\"], \"postprocess\": \n ([whenToken, _1, cond, thenToken, _2, expr]) => ({\n type: NodeType.case_when,\n whenKw: addComments(toKeywordNode(whenToken), { trailing: _1 }),\n thenKw: addComments(toKeywordNode(thenToken), { trailing: _2 }),\n condition: cond,\n result: expr,\n })\n },\n {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE), \"_\", \"expression_chain_\"], \"postprocess\": \n ([elseToken, _, expr]) => ({\n type: NodeType.case_else,\n elseKw: addComments(toKeywordNode(elseToken), { trailing: _ }),\n result: expr,\n })\n },\n {\"name\": \"comma$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA)]},\n {\"name\": \"comma\", \"symbols\": [\"comma$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.comma })},\n {\"name\": \"asterisk$subexpression$1\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)]},\n {\"name\": \"asterisk\", \"symbols\": [\"asterisk$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n {\"name\": \"operator$subexpression$1\", \"symbols\": [(lexer.has(\"OPERATOR\") ? {type: \"OPERATOR\"} : OPERATOR)]},\n {\"name\": \"operator\", \"symbols\": [\"operator$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"IDENTIFIER\") ? {type: \"IDENTIFIER\"} : IDENTIFIER)]},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_IDENTIFIER\") ? {type: \"QUOTED_IDENTIFIER\"} : QUOTED_IDENTIFIER)]},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"VARIABLE\") ? {type: \"VARIABLE\"} : VARIABLE)]},\n {\"name\": \"identifier\", \"symbols\": [\"identifier$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.identifier, quoted: token.type !== \"IDENTIFIER\", text: token.text })},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NAMED_PARAMETER\") ? {type: \"NAMED_PARAMETER\"} : NAMED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_PARAMETER\") ? {type: \"QUOTED_PARAMETER\"} : QUOTED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBERED_PARAMETER\") ? {type: \"NUMBERED_PARAMETER\"} : NUMBERED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"POSITIONAL_PARAMETER\") ? {type: \"POSITIONAL_PARAMETER\"} : POSITIONAL_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"CUSTOM_PARAMETER\") ? {type: \"CUSTOM_PARAMETER\"} : CUSTOM_PARAMETER)]},\n {\"name\": \"parameter\", \"symbols\": [\"parameter$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.parameter, key: token.key, text: token.text })},\n {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBER\") ? {type: \"NUMBER\"} : NUMBER)]},\n {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"STRING\") ? {type: \"STRING\"} : STRING)]},\n {\"name\": \"literal\", \"symbols\": [\"literal$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.literal, text: token.text })},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_KEYWORD\") ? {type: \"RESERVED_KEYWORD\"} : RESERVED_KEYWORD)]},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_PHRASE\") ? {type: \"RESERVED_PHRASE\"} : RESERVED_PHRASE)]},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_JOIN\") ? {type: \"RESERVED_JOIN\"} : RESERVED_JOIN)]},\n {\"name\": \"keyword\", \"symbols\": [\"keyword$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"data_type$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_DATA_TYPE\") ? {type: \"RESERVED_DATA_TYPE\"} : RESERVED_DATA_TYPE)]},\n {\"name\": \"data_type\", \"symbols\": [\"data_type$subexpression$1\"], \"postprocess\": \n ([[token]]) => toDataTypeNode(token)\n },\n {\"name\": \"data_type\", \"symbols\": [(lexer.has(\"RESERVED_PARAMETERIZED_DATA_TYPE\") ? {type: \"RESERVED_PARAMETERIZED_DATA_TYPE\"} : RESERVED_PARAMETERIZED_DATA_TYPE), \"_\", \"parenthesis\"], \"postprocess\": \n ([nameToken, _, parens]) => ({\n type: NodeType.parameterized_data_type,\n dataType: addComments(toDataTypeNode(nameToken), { trailing: _ }),\n parenthesis: parens,\n })\n },\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"AND\") ? {type: \"AND\"} : AND)]},\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"OR\") ? {type: \"OR\"} : OR)]},\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"XOR\") ? {type: \"XOR\"} : XOR)]},\n {\"name\": \"logic_operator\", \"symbols\": [\"logic_operator$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"END\") ? {type: \"END\"} : END)]},\n {\"name\": \"other_keyword\", \"symbols\": [\"other_keyword$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"_$ebnf$1\", \"symbols\": []},\n {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", \"comment\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": ([comments]) => comments},\n {\"name\": \"comment\", \"symbols\": [(lexer.has(\"LINE_COMMENT\") ? {type: \"LINE_COMMENT\"} : LINE_COMMENT)], \"postprocess\": \n ([token]) => ({\n type: NodeType.line_comment,\n text: token.text,\n precedingWhitespace: token.precedingWhitespace,\n })\n },\n {\"name\": \"comment\", \"symbols\": [(lexer.has(\"BLOCK_COMMENT\") ? {type: \"BLOCK_COMMENT\"} : BLOCK_COMMENT)], \"postprocess\": \n ([token]) => ({\n type: NodeType.block_comment,\n text: token.text,\n precedingWhitespace: token.precedingWhitespace,\n })\n },\n {\"name\": \"comment\", \"symbols\": [(lexer.has(\"DISABLE_COMMENT\") ? {type: \"DISABLE_COMMENT\"} : DISABLE_COMMENT)], \"postprocess\": \n ([token]) => ({\n type: NodeType.disable_comment,\n text: token.text,\n precedingWhitespace: token.precedingWhitespace,\n })\n }\n ],\n ParserStart: \"main\",\n};\n\nexport default grammar;\n","import { last } from '../utils.js';\n\nimport Indentation from './Indentation.js';\n\n/** Whitespace modifiers to be used with add() method */\nexport enum WS {\n SPACE, // Adds single space\n NO_SPACE, // Removes preceding horizontal whitespace (if any)\n NO_NEWLINE, // Removes all preceding whitespace (whether horizontal or vertical)\n NEWLINE, // Adds single newline (and removes any preceding whitespace)\n MANDATORY_NEWLINE, // Adds single newline that can't be removed by NO_NEWLINE\n INDENT, // Adds indentation (as much as needed for current indentation level)\n SINGLE_INDENT, // Adds whitespace for single indentation step\n}\n\nexport type LayoutItem = WS.SPACE | WS.SINGLE_INDENT | WS.NEWLINE | WS.MANDATORY_NEWLINE | string;\n\n/**\n * API for constructing SQL string (especially the whitespace part).\n *\n * It hides the internal implementation.\n * Originally it used plain string concatenation, which was expensive.\n * Now it's storing items to array and builds the string only in the end.\n */\nexport default class Layout {\n private items: LayoutItem[] = [];\n\n constructor(public indentation: Indentation) {}\n\n /**\n * Appends token strings and whitespace modifications to SQL string.\n */\n public add(...items: (WS | string)[]) {\n for (const item of items) {\n switch (item) {\n case WS.SPACE:\n this.items.push(WS.SPACE);\n break;\n case WS.NO_SPACE:\n this.trimHorizontalWhitespace();\n break;\n case WS.NO_NEWLINE:\n this.trimWhitespace();\n break;\n case WS.NEWLINE:\n this.trimHorizontalWhitespace();\n this.addNewline(WS.NEWLINE);\n break;\n case WS.MANDATORY_NEWLINE:\n this.trimHorizontalWhitespace();\n this.addNewline(WS.MANDATORY_NEWLINE);\n break;\n case WS.INDENT:\n this.addIndentation();\n break;\n case WS.SINGLE_INDENT:\n this.items.push(WS.SINGLE_INDENT);\n break;\n default:\n this.items.push(item);\n }\n }\n }\n\n private trimHorizontalWhitespace() {\n while (isHorizontalWhitespace(last(this.items))) {\n this.items.pop();\n }\n }\n\n private trimWhitespace() {\n while (isRemovableWhitespace(last(this.items))) {\n this.items.pop();\n }\n }\n\n private addNewline(newline: WS.NEWLINE | WS.MANDATORY_NEWLINE) {\n if (this.items.length > 0) {\n switch (last(this.items)) {\n case WS.NEWLINE:\n this.items.pop();\n this.items.push(newline);\n break;\n case WS.MANDATORY_NEWLINE:\n // keep as is\n break;\n default:\n this.items.push(newline);\n break;\n }\n }\n }\n\n private addIndentation() {\n for (let i = 0; i < this.indentation.getLevel(); i++) {\n this.items.push(WS.SINGLE_INDENT);\n }\n }\n\n /**\n * Returns the final SQL string.\n */\n public toString(): string {\n return this.items.map(item => this.itemToString(item)).join('');\n }\n\n /**\n * Returns the internal layout data\n */\n public getLayoutItems(): LayoutItem[] {\n return this.items;\n }\n\n private itemToString(item: LayoutItem): string {\n switch (item) {\n case WS.SPACE:\n return ' ';\n case WS.NEWLINE:\n case WS.MANDATORY_NEWLINE:\n return '\\n';\n case WS.SINGLE_INDENT:\n return this.indentation.getSingleIndent();\n default:\n return item;\n }\n }\n}\n\nconst isHorizontalWhitespace = (item: WS | string | undefined) =>\n item === WS.SPACE || item === WS.SINGLE_INDENT;\n\nconst isRemovableWhitespace = (item: WS | string | undefined) =>\n item === WS.SPACE || item === WS.SINGLE_INDENT || item === WS.NEWLINE;\n","import { IndentStyle } from '../FormatOptions.js';\nimport { isLogicalOperator, TokenType } from '../lexer/token.js';\n\n/**\n * When tabular style enabled,\n * produces a 10-char wide version of token text.\n */\nexport default function toTabularFormat(tokenText: string, indentStyle: IndentStyle): string {\n if (indentStyle === 'standard') {\n return tokenText;\n }\n\n let tail = [] as string[]; // rest of keyword\n if (tokenText.length >= 10 && tokenText.includes(' ')) {\n // split for long keywords like INNER JOIN or UNION DISTINCT\n [tokenText, ...tail] = tokenText.split(' ');\n }\n\n if (indentStyle === 'tabularLeft') {\n tokenText = tokenText.padEnd(9, ' ');\n } else {\n tokenText = tokenText.padStart(9, ' ');\n }\n\n return tokenText + ['', ...tail].join(' ');\n}\n\n/**\n * True when the token can be formatted in tabular style\n */\nexport function isTabularToken(type: TokenType): boolean {\n return (\n isLogicalOperator(type) ||\n type === TokenType.RESERVED_CLAUSE ||\n type === TokenType.RESERVED_SELECT ||\n type === TokenType.RESERVED_SET_OPERATION ||\n type === TokenType.RESERVED_JOIN ||\n type === TokenType.LIMIT\n );\n}\n","import { last } from '../utils.js';\n\nconst INDENT_TYPE_TOP_LEVEL = 'top-level';\nconst INDENT_TYPE_BLOCK_LEVEL = 'block-level';\n\n/**\n * Manages indentation levels.\n *\n * There are two types of indentation levels:\n *\n * - BLOCK_LEVEL : increased by open-parenthesis\n * - TOP_LEVEL : increased by RESERVED_CLAUSE words\n */\nexport default class Indentation {\n private indentTypes: string[] = [];\n\n /**\n * @param {string} indent A string to indent with\n */\n constructor(private indent: string) {}\n\n /**\n * Returns indentation string for single indentation step.\n */\n getSingleIndent(): string {\n return this.indent;\n }\n\n /**\n * Returns current indentation level\n */\n getLevel(): number {\n return this.indentTypes.length;\n }\n\n /**\n * Increases indentation by one top-level indent.\n */\n increaseTopLevel() {\n this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);\n }\n\n /**\n * Increases indentation by one block-level indent.\n */\n increaseBlockLevel() {\n this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);\n }\n\n /**\n * Decreases indentation by one top-level indent.\n * Does nothing when the previous indent is not top-level.\n */\n decreaseTopLevel() {\n if (this.indentTypes.length > 0 && last(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {\n this.indentTypes.pop();\n }\n }\n\n /**\n * Decreases indentation by one block-level indent.\n * If there are top-level indents within the block-level indent,\n * throws away these as well.\n */\n decreaseBlockLevel() {\n while (this.indentTypes.length > 0) {\n const type = this.indentTypes.pop();\n if (type !== INDENT_TYPE_TOP_LEVEL) {\n break;\n }\n }\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport Indentation from './Indentation.js';\nimport Layout, { WS } from './Layout.js';\n\n/**\n * Like Layout, but only formats single-line expressions.\n *\n * Throws InlineLayoutError:\n * - when encountering a newline\n * - when exceeding configured expressionWidth\n */\nexport default class InlineLayout extends Layout {\n private length = 0;\n // Keeps track of the trailing whitespace,\n // so that we can decrease length when encountering WS.NO_SPACE,\n // but only when there actually is a space to remove.\n private trailingSpace = false;\n\n constructor(private expressionWidth: number) {\n super(new Indentation('')); // no indentation in inline layout\n }\n\n public add(...items: (WS | string)[]) {\n items.forEach(item => this.addToLength(item));\n if (this.length > this.expressionWidth) {\n // We have exceeded the allowable width\n throw new InlineLayoutError();\n }\n super.add(...items);\n }\n\n private addToLength(item: WS | string) {\n if (typeof item === 'string') {\n this.length += item.length;\n this.trailingSpace = false;\n } else if (item === WS.MANDATORY_NEWLINE || item === WS.NEWLINE) {\n // newlines not allowed within inline block\n throw new InlineLayoutError();\n } else if (item === WS.INDENT || item === WS.SINGLE_INDENT || item === WS.SPACE) {\n if (!this.trailingSpace) {\n this.length++;\n this.trailingSpace = true;\n }\n } else if (item === WS.NO_NEWLINE || item === WS.NO_SPACE) {\n if (this.trailingSpace) {\n this.trailingSpace = false;\n this.length--;\n }\n }\n }\n}\n\n/**\n * Thrown when block of SQL can't be formatted as a single line.\n */\nexport class InlineLayoutError extends Error {}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { equalizeWhitespace, isMultiline, last } from '../utils.js';\n\nimport Params from './Params.js';\nimport { isTabularStyle } from './config.js';\nimport { TokenType } from '../lexer/token.js';\nimport {\n AllColumnsAsteriskNode,\n ArraySubscriptNode,\n AstNode,\n BetweenPredicateNode,\n SetOperationNode,\n ClauseNode,\n FunctionCallNode,\n LimitClauseNode,\n NodeType,\n ParenthesisNode,\n LiteralNode,\n IdentifierNode,\n ParameterNode,\n OperatorNode,\n LineCommentNode,\n BlockCommentNode,\n CommaNode,\n KeywordNode,\n PropertyAccessNode,\n CommentNode,\n CaseExpressionNode,\n CaseWhenNode,\n CaseElseNode,\n DataTypeNode,\n ParameterizedDataTypeNode,\n DisableCommentNode,\n} from '../parser/ast.js';\n\nimport Layout, { WS } from './Layout.js';\nimport toTabularFormat, { isTabularToken } from './tabularStyle.js';\nimport InlineLayout, { InlineLayoutError } from './InlineLayout.js';\n\ninterface ExpressionFormatterParams {\n cfg: FormatOptions;\n dialectCfg: ProcessedDialectFormatOptions;\n params: Params;\n layout: Layout;\n inline?: boolean;\n}\n\nexport interface DialectFormatOptions {\n // List of operators that should always be formatted without surrounding spaces\n alwaysDenseOperators?: string[];\n // List of clauses that should be formatted on a single line\n onelineClauses: string[];\n // List of clauses that should be formatted on a single line in tabular style\n tabularOnelineClauses?: string[];\n}\n\n// Contains the same data as DialectFormatOptions,\n// but optimized for faster and more conventient lookup.\nexport interface ProcessedDialectFormatOptions {\n alwaysDenseOperators: string[];\n onelineClauses: Record;\n tabularOnelineClauses: Record;\n}\n\n/** Formats a generic SQL expression */\nexport default class ExpressionFormatter {\n private cfg: FormatOptions;\n private dialectCfg: ProcessedDialectFormatOptions;\n private params: Params;\n private layout: Layout;\n\n private inline = false;\n private nodes: AstNode[] = [];\n private index = -1;\n\n constructor({ cfg, dialectCfg, params, layout, inline = false }: ExpressionFormatterParams) {\n this.cfg = cfg;\n this.dialectCfg = dialectCfg;\n this.inline = inline;\n this.params = params;\n this.layout = layout;\n }\n\n public format(nodes: AstNode[]): Layout {\n this.nodes = nodes;\n\n for (this.index = 0; this.index < this.nodes.length; this.index++) {\n this.formatNode(this.nodes[this.index]);\n }\n return this.layout;\n }\n\n private formatNode(node: AstNode) {\n this.formatComments(node.leadingComments);\n this.formatNodeWithoutComments(node);\n this.formatComments(node.trailingComments);\n }\n\n private formatNodeWithoutComments(node: AstNode) {\n switch (node.type) {\n case NodeType.function_call:\n return this.formatFunctionCall(node);\n case NodeType.parameterized_data_type:\n return this.formatParameterizedDataType(node);\n case NodeType.array_subscript:\n return this.formatArraySubscript(node);\n case NodeType.property_access:\n return this.formatPropertyAccess(node);\n case NodeType.parenthesis:\n return this.formatParenthesis(node);\n case NodeType.between_predicate:\n return this.formatBetweenPredicate(node);\n case NodeType.case_expression:\n return this.formatCaseExpression(node);\n case NodeType.case_when:\n return this.formatCaseWhen(node);\n case NodeType.case_else:\n return this.formatCaseElse(node);\n case NodeType.clause:\n return this.formatClause(node);\n case NodeType.set_operation:\n return this.formatSetOperation(node);\n case NodeType.limit_clause:\n return this.formatLimitClause(node);\n case NodeType.all_columns_asterisk:\n return this.formatAllColumnsAsterisk(node);\n case NodeType.literal:\n return this.formatLiteral(node);\n case NodeType.identifier:\n return this.formatIdentifier(node);\n case NodeType.parameter:\n return this.formatParameter(node);\n case NodeType.operator:\n return this.formatOperator(node);\n case NodeType.comma:\n return this.formatComma(node);\n case NodeType.line_comment:\n return this.formatLineComment(node);\n case NodeType.block_comment:\n return this.formatBlockComment(node);\n case NodeType.disable_comment:\n return this.formatBlockComment(node);\n case NodeType.data_type:\n return this.formatDataType(node);\n case NodeType.keyword:\n return this.formatKeywordNode(node);\n }\n }\n\n private formatFunctionCall(node: FunctionCallNode) {\n this.withComments(node.nameKw, () => {\n this.layout.add(this.showFunctionKw(node.nameKw));\n });\n this.formatNode(node.parenthesis);\n }\n\n private formatParameterizedDataType(node: ParameterizedDataTypeNode) {\n this.withComments(node.dataType, () => {\n this.layout.add(this.showDataType(node.dataType));\n });\n this.formatNode(node.parenthesis);\n }\n\n private formatArraySubscript(node: ArraySubscriptNode) {\n let formattedArray: string;\n\n switch (node.array.type) {\n case NodeType.data_type:\n formattedArray = this.showDataType(node.array);\n break;\n case NodeType.keyword:\n formattedArray = this.showKw(node.array);\n break;\n default:\n formattedArray = this.showIdentifier(node.array);\n break;\n }\n\n this.withComments(node.array, () => {\n this.layout.add(formattedArray);\n });\n\n this.formatNode(node.parenthesis);\n }\n\n private formatPropertyAccess(node: PropertyAccessNode) {\n this.formatNode(node.object);\n this.layout.add(WS.NO_SPACE, node.operator);\n this.formatNode(node.property);\n }\n\n private formatParenthesis(node: ParenthesisNode) {\n const inlineLayout = this.formatInlineExpression(node.children);\n\n if (inlineLayout) {\n this.layout.add(node.openParen);\n this.layout.add(...inlineLayout.getLayoutItems());\n this.layout.add(WS.NO_SPACE, node.closeParen, WS.SPACE);\n } else {\n this.layout.add(node.openParen, WS.NEWLINE);\n\n if (isTabularStyle(this.cfg)) {\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n } else {\n this.layout.indentation.increaseBlockLevel();\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseBlockLevel();\n }\n\n this.layout.add(WS.NEWLINE, WS.INDENT, node.closeParen, WS.SPACE);\n }\n }\n\n private formatBetweenPredicate(node: BetweenPredicateNode) {\n this.layout.add(this.showKw(node.betweenKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.expr1);\n this.layout.add(WS.NO_SPACE, WS.SPACE, this.showNonTabularKw(node.andKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.expr2);\n this.layout.add(WS.SPACE);\n }\n\n private formatCaseExpression(node: CaseExpressionNode) {\n this.formatNode(node.caseKw);\n\n this.layout.indentation.increaseBlockLevel();\n this.layout = this.formatSubExpression(node.expr);\n this.layout = this.formatSubExpression(node.clauses);\n this.layout.indentation.decreaseBlockLevel();\n\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.endKw);\n }\n\n private formatCaseWhen(node: CaseWhenNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.whenKw);\n this.layout = this.formatSubExpression(node.condition);\n this.formatNode(node.thenKw);\n this.layout = this.formatSubExpression(node.result);\n }\n\n private formatCaseElse(node: CaseElseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.elseKw);\n this.layout = this.formatSubExpression(node.result);\n }\n\n private formatClause(node: ClauseNode) {\n if (this.isOnelineClause(node)) {\n this.formatClauseInOnelineStyle(node);\n } else if (isTabularStyle(this.cfg)) {\n this.formatClauseInTabularStyle(node);\n } else {\n this.formatClauseInIndentedStyle(node);\n }\n }\n\n private isOnelineClause(node: ClauseNode): boolean {\n if (isTabularStyle(this.cfg)) {\n return this.dialectCfg.tabularOnelineClauses[node.nameKw.text];\n } else {\n return this.dialectCfg.onelineClauses[node.nameKw.text];\n }\n }\n\n private formatClauseInIndentedStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n this.layout.indentation.increaseTopLevel();\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatClauseInOnelineStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.children);\n }\n\n private formatClauseInTabularStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatSetOperation(node: SetOperationNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n }\n\n private formatLimitClause(node: LimitClauseNode) {\n this.withComments(node.limitKw, () => {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.limitKw));\n });\n this.layout.indentation.increaseTopLevel();\n\n if (isTabularStyle(this.cfg)) {\n this.layout.add(WS.SPACE);\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n }\n\n if (node.offset) {\n this.layout = this.formatSubExpression(node.offset);\n this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n this.layout = this.formatSubExpression(node.count);\n } else {\n this.layout = this.formatSubExpression(node.count);\n }\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatAllColumnsAsterisk(_node: AllColumnsAsteriskNode) {\n this.layout.add('*', WS.SPACE);\n }\n\n private formatLiteral(node: LiteralNode) {\n this.layout.add(node.text, WS.SPACE);\n }\n\n private formatIdentifier(node: IdentifierNode) {\n this.layout.add(this.showIdentifier(node), WS.SPACE);\n }\n\n private formatParameter(node: ParameterNode) {\n this.layout.add(this.params.get(node), WS.SPACE);\n }\n\n private formatOperator({ text }: OperatorNode) {\n if (this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(text)) {\n this.layout.add(WS.NO_SPACE, text);\n } else if (text === ':') {\n this.layout.add(WS.NO_SPACE, text, WS.SPACE);\n } else {\n this.layout.add(text, WS.SPACE);\n }\n }\n\n private formatComma(_node: CommaNode) {\n if (!this.inline) {\n this.layout.add(WS.NO_SPACE, ',', WS.NEWLINE, WS.INDENT);\n } else {\n this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n }\n }\n\n private withComments(node: AstNode, fn: () => void) {\n this.formatComments(node.leadingComments);\n fn();\n this.formatComments(node.trailingComments);\n }\n\n private formatComments(comments: CommentNode[] | undefined) {\n if (!comments) {\n return;\n }\n comments.forEach(com => {\n if (com.type === NodeType.line_comment) {\n this.formatLineComment(com);\n } else {\n this.formatBlockComment(com);\n }\n });\n }\n\n private formatLineComment(node: LineCommentNode) {\n if (isMultiline(node.precedingWhitespace || '')) {\n this.layout.add(WS.NEWLINE, WS.INDENT, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n } else if (this.layout.getLayoutItems().length > 0) {\n this.layout.add(WS.NO_NEWLINE, WS.SPACE, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n } else {\n // comment is the first item in code - no need to add preceding spaces\n this.layout.add(node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n }\n }\n\n private formatBlockComment(node: BlockCommentNode | DisableCommentNode) {\n if (node.type === NodeType.block_comment && this.isMultilineBlockComment(node)) {\n this.splitBlockComment(node.text).forEach(line => {\n this.layout.add(WS.NEWLINE, WS.INDENT, line);\n });\n this.layout.add(WS.NEWLINE, WS.INDENT);\n } else {\n this.layout.add(node.text, WS.SPACE);\n }\n }\n\n private isMultilineBlockComment(node: BlockCommentNode): boolean {\n return isMultiline(node.text) || isMultiline(node.precedingWhitespace || '');\n }\n\n private isDocComment(comment: string): boolean {\n const lines = comment.split(/\\n/);\n return (\n // first line starts with /* or /**\n /^\\/\\*\\*?$/.test(lines[0]) &&\n // intermediate lines start with *\n lines.slice(1, lines.length - 1).every(line => /^\\s*\\*/.test(line)) &&\n // last line ends with */\n /^\\s*\\*\\/$/.test(last(lines) as string)\n );\n }\n\n // Breaks up block comment to multiple lines.\n // For example this doc-comment (dots representing leading whitespace):\n //\n // ..../**\n // .....* Some description here\n // .....* and here too\n // .....*/\n //\n // gets broken to this array (note the leading single spaces):\n //\n // [ '/**',\n // '.* Some description here',\n // '.* and here too',\n // '.*/' ]\n //\n // However, a normal comment (non-doc-comment) like this:\n //\n // ..../*\n // ....Some description here\n // ....*/\n //\n // gets broken to this array (no leading spaces):\n //\n // [ '/*',\n // 'Some description here',\n // '*/' ]\n //\n private splitBlockComment(comment: string): string[] {\n if (this.isDocComment(comment)) {\n return comment.split(/\\n/).map(line => {\n if (/^\\s*\\*/.test(line)) {\n return ' ' + line.replace(/^\\s*/, '');\n } else {\n return line;\n }\n });\n } else {\n return comment.split(/\\n/).map(line => line.replace(/^\\s*/, ''));\n }\n }\n\n private formatSubExpression(nodes: AstNode[]): Layout {\n return new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialectCfg,\n params: this.params,\n layout: this.layout,\n inline: this.inline,\n }).format(nodes);\n }\n\n private formatInlineExpression(nodes: AstNode[]): Layout | undefined {\n const oldParamIndex = this.params.getPositionalParameterIndex();\n try {\n return new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialectCfg,\n params: this.params,\n layout: new InlineLayout(this.cfg.expressionWidth),\n inline: true,\n }).format(nodes);\n } catch (e) {\n if (e instanceof InlineLayoutError) {\n // While formatting, some of the positional parameters might have\n // been consumed, which increased the current parameter index.\n // We reset the index to an earlier state, so we can run the\n // formatting again and re-consume these parameters in non-inline mode.\n this.params.setPositionalParameterIndex(oldParamIndex);\n return undefined;\n } else {\n // forward all unexpected errors\n throw e;\n }\n }\n }\n\n private formatKeywordNode(node: KeywordNode): void {\n switch (node.tokenType) {\n case TokenType.RESERVED_JOIN:\n return this.formatJoin(node);\n case TokenType.AND:\n case TokenType.OR:\n case TokenType.XOR:\n return this.formatLogicalOperator(node);\n default:\n return this.formatKeyword(node);\n }\n }\n\n private formatJoin(node: KeywordNode) {\n if (isTabularStyle(this.cfg)) {\n // in tabular style JOINs are at the same level as clauses\n this.layout.indentation.decreaseTopLevel();\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n }\n }\n\n private formatKeyword(node: KeywordNode) {\n this.layout.add(this.showKw(node), WS.SPACE);\n }\n\n private formatLogicalOperator(node: KeywordNode) {\n if (this.cfg.logicalOperatorNewline === 'before') {\n if (isTabularStyle(this.cfg)) {\n // In tabular style AND/OR is placed on the same level as clauses\n this.layout.indentation.decreaseTopLevel();\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n }\n } else {\n this.layout.add(this.showKw(node), WS.NEWLINE, WS.INDENT);\n }\n }\n\n private formatDataType(node: DataTypeNode) {\n this.layout.add(this.showDataType(node), WS.SPACE);\n }\n\n private showKw(node: KeywordNode): string {\n if (isTabularToken(node.tokenType)) {\n return toTabularFormat(this.showNonTabularKw(node), this.cfg.indentStyle);\n } else {\n return this.showNonTabularKw(node);\n }\n }\n\n // Like showKw(), but skips tabular formatting\n private showNonTabularKw(node: KeywordNode): string {\n switch (this.cfg.keywordCase) {\n case 'preserve':\n return equalizeWhitespace(node.raw);\n case 'upper':\n return node.text;\n case 'lower':\n return node.text.toLowerCase();\n }\n }\n\n private showFunctionKw(node: KeywordNode): string {\n if (isTabularToken(node.tokenType)) {\n return toTabularFormat(this.showNonTabularFunctionKw(node), this.cfg.indentStyle);\n } else {\n return this.showNonTabularFunctionKw(node);\n }\n }\n\n // Like showFunctionKw(), but skips tabular formatting\n private showNonTabularFunctionKw(node: KeywordNode): string {\n switch (this.cfg.functionCase) {\n case 'preserve':\n return equalizeWhitespace(node.raw);\n case 'upper':\n return node.text;\n case 'lower':\n return node.text.toLowerCase();\n }\n }\n\n private showIdentifier(node: IdentifierNode): string {\n if (node.quoted) {\n return node.text;\n } else {\n switch (this.cfg.identifierCase) {\n case 'preserve':\n return node.text;\n case 'upper':\n return node.text.toUpperCase();\n case 'lower':\n return node.text.toLowerCase();\n }\n }\n }\n\n private showDataType(node: DataTypeNode): string {\n switch (this.cfg.dataTypeCase) {\n case 'preserve':\n return equalizeWhitespace(node.raw);\n case 'upper':\n return node.text;\n case 'lower':\n return node.text.toLowerCase();\n }\n }\n}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { indentString } from './config.js';\nimport Params from './Params.js';\n\nimport { createParser } from '../parser/createParser.js';\nimport { StatementNode } from '../parser/ast.js';\nimport { Dialect } from '../dialect.js';\n\nimport ExpressionFormatter from './ExpressionFormatter.js';\nimport Layout, { WS } from './Layout.js';\nimport Indentation from './Indentation.js';\n\n/** Main formatter class that produces a final output string from list of tokens */\nexport default class Formatter {\n private dialect: Dialect;\n private cfg: FormatOptions;\n private params: Params;\n\n constructor(dialect: Dialect, cfg: FormatOptions) {\n this.dialect = dialect;\n this.cfg = cfg;\n this.params = new Params(this.cfg.params);\n }\n\n /**\n * Formats an SQL query.\n * @param {string} query - The SQL query string to be formatted\n * @return {string} The formatter query\n */\n public format(query: string): string {\n const ast = this.parse(query);\n const formattedQuery = this.formatAst(ast);\n return formattedQuery.trimEnd();\n }\n\n private parse(query: string): StatementNode[] {\n return createParser(this.dialect.tokenizer).parse(query, this.cfg.paramTypes || {});\n }\n\n private formatAst(statements: StatementNode[]): string {\n return statements\n .map(stat => this.formatStatement(stat))\n .join('\\n'.repeat(this.cfg.linesBetweenQueries + 1));\n }\n\n private formatStatement(statement: StatementNode): string {\n const layout = new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialect.formatOptions,\n params: this.params,\n layout: new Layout(new Indentation(indentString(this.cfg))),\n }).format(statement.children);\n\n if (!statement.hasSemicolon) {\n // do nothing\n } else if (this.cfg.newlineBeforeSemicolon) {\n layout.add(WS.NEWLINE, ';');\n } else {\n layout.add(WS.NO_NEWLINE, ';');\n }\n return layout.toString();\n }\n}\n","import { FormatOptions } from './FormatOptions.js';\nimport { ParamItems } from './formatter/Params.js';\nimport { ParamTypes } from './lexer/TokenizerOptions.js';\n\nexport class ConfigError extends Error {}\n\nexport function validateConfig(cfg: FormatOptions): FormatOptions {\n const removedOptions = [\n 'multilineLists',\n 'newlineBeforeOpenParen',\n 'newlineBeforeCloseParen',\n 'aliasAs',\n 'commaPosition',\n 'tabulateAlias',\n ];\n for (const optionName of removedOptions) {\n if (optionName in cfg) {\n throw new ConfigError(`${optionName} config is no more supported.`);\n }\n }\n\n if (cfg.expressionWidth <= 0) {\n throw new ConfigError(\n `expressionWidth config must be positive number. Received ${cfg.expressionWidth} instead.`\n );\n }\n\n if (cfg.params && !validateParams(cfg.params)) {\n // eslint-disable-next-line no-console\n console.warn('WARNING: All \"params\" option values should be strings.');\n }\n\n if (cfg.paramTypes && !validateParamTypes(cfg.paramTypes)) {\n throw new ConfigError(\n 'Empty regex given in custom paramTypes. That would result in matching infinite amount of parameters.'\n );\n }\n\n return cfg;\n}\n\nfunction validateParams(params: ParamItems | string[]): boolean {\n const paramValues = params instanceof Array ? params : Object.values(params);\n return paramValues.every(p => typeof p === 'string');\n}\n\nfunction validateParamTypes(paramTypes: ParamTypes): boolean {\n if (paramTypes.custom && Array.isArray(paramTypes.custom)) {\n return paramTypes.custom.every(p => p.regex !== '');\n }\n return true;\n}\n","import * as allDialects from './allDialects.js';\n\nimport { FormatOptions } from './FormatOptions.js';\nimport { createDialect, DialectOptions } from './dialect.js';\nimport Formatter from './formatter/Formatter.js';\nimport { ConfigError, validateConfig } from './validateConfig.js';\n\nconst dialectNameMap: Record = {\n bigquery: 'bigquery',\n db2: 'db2',\n db2i: 'db2i',\n hive: 'hive',\n mariadb: 'mariadb',\n mysql: 'mysql',\n n1ql: 'n1ql',\n plsql: 'plsql',\n postgresql: 'postgresql',\n redshift: 'redshift',\n spark: 'spark',\n sqlite: 'sqlite',\n sql: 'sql',\n tidb: 'tidb',\n trino: 'trino',\n transactsql: 'transactsql',\n tsql: 'transactsql', // alias for transactsq\n singlestoredb: 'singlestoredb',\n snowflake: 'snowflake',\n};\n\nexport const supportedDialects = Object.keys(dialectNameMap);\nexport type SqlLanguage = keyof typeof dialectNameMap;\n\nexport type FormatOptionsWithLanguage = Partial & {\n language?: SqlLanguage;\n};\n\nexport type FormatOptionsWithDialect = Partial & {\n dialect: DialectOptions;\n};\n\nconst defaultOptions: FormatOptions = {\n tabWidth: 2,\n useTabs: false,\n keywordCase: 'preserve',\n identifierCase: 'preserve',\n dataTypeCase: 'preserve',\n functionCase: 'preserve',\n indentStyle: 'standard',\n logicalOperatorNewline: 'before',\n expressionWidth: 50,\n linesBetweenQueries: 1,\n denseOperators: false,\n newlineBeforeSemicolon: false,\n};\n\n/**\n * Format whitespace in a query to make it easier to read.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithLanguage} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const format = (query: string, cfg: FormatOptionsWithLanguage = {}): string => {\n if (typeof cfg.language === 'string' && !supportedDialects.includes(cfg.language)) {\n throw new ConfigError(`Unsupported SQL dialect: ${cfg.language}`);\n }\n\n const canonicalDialectName = dialectNameMap[cfg.language || 'sql'];\n\n return formatDialect(query, {\n ...cfg,\n dialect: allDialects[canonicalDialectName],\n });\n};\n\n/**\n * Like the above format(), but language parameter is mandatory\n * and must be a Dialect object instead of a string.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithDialect} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const formatDialect = (\n query: string,\n { dialect, ...cfg }: FormatOptionsWithDialect\n): string => {\n if (typeof query !== 'string') {\n throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);\n }\n\n const options = validateConfig({\n ...defaultOptions,\n ...cfg,\n });\n\n return new Formatter(createDialect(dialect), options).format(query);\n};\n\nexport type FormatFn = typeof format;\n"],"mappings":"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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAA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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;ACpUO,IAAMC,YAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxbA,IAAMC,kBAAiB,cAAc,CAAC,yBAAyB,CAAC;AAEhE,IAAMC,mBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,0BAAyB,cAAc;AAAA,EAC3C;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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ACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;ACnVO,IAAMC,YAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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A;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1NO,IAAMC,YAAqB;AAAA;AAAA;AAAA,EAGhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAGF;;;AC9QO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;A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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,iBAAgB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,mBAAkB,cAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,UAA0B;AAAA,EACrC,MAAM;AAAA,EACN,kBAAkB;AAAA,IAChB,gBAAAN;AAAA,IACA,iBAAiB,CAAC,GAAGC,kBAAiB,GAAGC,yBAAwB,GAAGC,sBAAqB;AAAA,IACzF,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAa;AAAA,IACb,kBAAkBC;AAAA,IAClB,mBAAmBC;AAAA,IACnB,uBAAuBC;AAAA;AAAA,IAEvB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA,EAAE,OAAO,UAAU,UAAU,CAAC,KAAK,GAAG,GAAG,eAAe,KAAK;AAAA,IAC/D;AAAA,IACA,YAAY,CAAC,IAAI;AAAA,IACjB,YAAY,EAAE,OAAO,KAAK,MAAM,KAAK,sBAAsB,KAAK;AAAA,IAChE,eAAe;AAAA,MACb,EAAE,OAAO,qBAAqB;AAAA,MAC9B,EAAE,OAAO,YAAY,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,MAC1D,EAAE,OAAO,YAAY,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,MAC1D,EAAE,OAAO,MAAM,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,IACtD;AAAA,IACA,YAAY,EAAE,YAAY,KAAK;AAAA,IAC/B,kBAAkB,CAAC,MAAM,GAAG;AAAA,IAC5B,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACF;AAAA,IACA,aAAAC;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,CAAC,GAAGR,yBAAwB,GAAGC,sBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;AC/TO,IAAMQ,YAAqB;AAAA;AAAA,EAEhC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAEF;;;AC5RO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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A;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAEF;;;AChPO,IAAMC,aAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AACF;;;ACtOO,IAAMC,YAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,E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A;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,aAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACzVO,IAAMC,aAAsB;AAAA;AAAA;AAAA,EAGjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AACF;;;ACtsBO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AACF;;;ACpJA,IAAMC,mBAAiB,cAAc,CAAC,yBAAyB,CAAC;AAEhE,IAAMC,oBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,0BAAyB,cAAc;AAAA,EAC3C;AACF,CAAC;AAED,IAAMC,yBAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,0BAAwB,cAAc;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,kBAAgB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,oBAAkB,cAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,aAA6B;AAAA,EACxC,MAAM;AAAA,EACN,kBAAkB;AAAA,IAChB,gBAAAN;AAAA,IACA,iBAAiB,CAAC,GAAGC,mBAAiB,GAAGC,yBAAwB,GAAGC,sBAAqB;AAAA,IACzF,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAkBC;AAAA,IAClB,mBAAmBC;AAAA,IACnB,uBAAuBC;AAAA,IACvB,qBAAqB;AAAA,IACrB,aAAa,CAAC,IAAI;AAAA,IAClB,aAAa;AAAA,MACX;AAAA,MACA,EAAE,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE;AAAA,MACnC,EAAE,OAAO,YAAY,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,MAC1D,EAAE,OAAO,UAAU,UAAU,CAAC,KAAK,GAAG,GAAG,eAAe,KAAK;AAAA,IAC/D;AAAA,IACA,YAAY,CAAC,EAAE,OAAO,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC;AAAA,IACjD,YAAY,EAAE,MAAM,IAAI;AAAA,IACxB,YAAY,EAAE,UAAU,CAAC,GAAG,EAAE;AAAA,IAC9B,WAAW;AAAA;AAAA,MAET;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,EACnB;AAAA,EACA,eAAe;AAAA,IACb,sBAAsB,CAAC,MAAM,GAAG;AAAA,IAChC,gBAAgB,CAAC,GAAGP,yBAAwB,GAAGC,sBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;ACtYO,IAAMO,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1WO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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P,0BAAwB,GAAGC,uBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;ACpLO,IAAMO,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;;;AC1SO,IAAMC,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;;;AClIO,IAAMC,aAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3KA,IAAMC,mBAAiB,cAAc,CAAC,yBAAyB,CAAC;AAEhE,IAAMC,oBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,2BAAyB,cAAc,CAAC,iDAAiD,CAAC;AAEhG,IAAMC,0BAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,0BAAwB,cAAc,CAAC,eAAe,UAAU,WAAW,CAAC;AAGlF,IAAMC,kBAAgB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,oBAAkB,cAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,SAAyB;AAAA,EACpC,MAAM;AAAA,EACN,kBAAkB;AAAA,IAChB,gBAAAN;AAAA,IACA,iBAAiB,CAAC,GAAGC,mBAAiB,GAAGC,0BAAwB,GAAGC,uBAAqB;AAAA,IACzF,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAkBC;AAAA,IAClB,mBAAmBC;AAAA,IACnB,uBAAuBC;AAAA,IACvB,aAAa;AAAA,MACX;AAAA,MACA,EAAE,OAAO,UAAU,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA;AAAA;AAAA,IAG1D;AAAA,IACA,YAAY,CAAC,SAAS,MAAM,IAAI;AAAA;AAAA,IAEhC,YAAY,EAAE,YAAY,MAAM,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,KAAK,GAAG,EAAE;AAAA,IACxE,WAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,OAAO,IAAI;AAAA,EACrE;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,CAAC,GAAGP,0BAAwB,GAAGC,uBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;AC9FO,IAAMO,cAAsB;AAAA;AAAA,EAEjC;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1GO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnbO,IAAMC,aAAqB;AAAA;AAAA,EAEhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAC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AA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AACF;;;ACjUO,IAAMC,aAAqB;AAAA;AAAA;AAAA,EAGhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAMC,cAAsB;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACxQO,IAAMC,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AClRA,IAAMC,mBAAiB,cAAc,CAAC,uCAAuC,CAAC;AAE9E,IAAMC,oBAAkB,cAAc;AAAA;AAAA,EAEpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,2BAAyB,cAAc;AAAA,EAC3C;AACF,CAAC;AAED,IAAMC,0BAAwB,cAAc;AAAA;AAAA,EAE1C;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,0BAAwB,cAAc;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAMC,kBAAgB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF,CAAC;AAED,IAAMC,oBAAkB,cAAc;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,gBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,kBAAkB;AAAA,IAChB,gBAAAN;AAAA,IACA,iBAAiB,CAAC,GAAGC,mBAAiB,GAAGC,0BAAwB,GAAGC,uBAAqB;AAAA,IACzF,uBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAkBC;AAAA,IAClB,mBAAmBC;AAAA,IACnB,uBAAuBC;AAAA;AAAA,IAEvB,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA,EAAE,OAAO,UAAU,UAAU,CAAC,KAAK,GAAG,GAAG,eAAe,KAAK;AAAA,IAC/D;AAAA,IACA,YAAY,CAAC,IAAI;AAAA,IACjB,YAAY,EAAE,OAAO,KAAK,MAAM,KAAK,sBAAsB,KAAK;AAAA,IAChE,eAAe;AAAA,MACb,EAAE,OAAO,oBAAoB;AAAA,MAC7B,EAAE,OAAO,MAAM,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK;AAAA,IACtD;AAAA,IACA,kBAAkB,CAAC,MAAM,GAAG;AAAA,IAC5B,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACF;AAAA,IACA,aAAAC;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,sBAAsB,CAAC,MAAM,OAAO,KAAK;AAAA,IACzC,gBAAgB,CAAC,GAAGR,0BAAwB,GAAGC,uBAAqB;AAAA,IACpE,uBAAAA;AAAA,EACF;AACF;;;AChSO,IAAMQ,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC/lBO,IAAMC,aAAqB;AAAA;AAAA;AAAA;AAAA,EAIhC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA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","names":["TokenType","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","keywords","dataTypes","functions","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","postProcess","functions","keywords","dataTypes","reservedSelect","reservedClauses","standardOnelineClauses","tabularOnelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","keywords","dataTypes","functions","string","END","_a","last","last","nearley","lexer","sql"]}