UNPKG

@pagenote/notion-database

Version:

make notion as a real-database for server

3,170 lines (3,097 loc) 1.06 MB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('stream'), require('http'), require('url'), require('punycode'), require('https'), require('zlib')) : typeof define === 'function' && define.amd ? define(['exports', 'stream', 'http', 'url', 'punycode', 'https', 'zlib'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.notionDatabase = {}, global.Stream, global.http, global.Url, global.require$$0, global.https, global.zlib)); })(this, (function (exports, Stream, http, Url, require$$0, https, zlib) { 'use strict'; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getAugmentedNamespace(n) { if (n.__esModule) return n; var f = n.default; if (typeof f == "function") { var a = function a () { if (this instanceof a) { var args = [null]; args.push.apply(args, arguments); var Ctor = Function.bind.apply(f, args); return new Ctor(); } return f.apply(this, arguments); }; a.prototype = f.prototype; } else a = {}; Object.defineProperty(a, '__esModule', {value: true}); Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function () { return n[k]; } }); }); return a; } var src = {}; var Client$1 = {}; var logging = {}; var utils$1 = {}; Object.defineProperty(utils$1, "__esModule", { value: true }); utils$1.isObject = utils$1.pick = utils$1.assertNever = void 0; /** * Utility for enforcing exhaustiveness checks in the type system. * * @see https://basarat.gitbook.io/typescript/type-system/discriminated-unions#throw-in-exhaustive-checks * * @param value The variable with no remaining values */ function assertNever(value) { throw new Error(`Unexpected value should never occur: ${value}`); } utils$1.assertNever = assertNever; function pick(base, keys) { const entries = keys.map(key => [key, base === null || base === void 0 ? void 0 : base[key]]); return Object.fromEntries(entries); } utils$1.pick = pick; function isObject(o) { return typeof o === "object" && o !== null; } utils$1.isObject = isObject; (function (exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.logLevelSeverity = exports.makeConsoleLogger = exports.LogLevel = void 0; const utils_1 = utils$1; var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; })(LogLevel = exports.LogLevel || (exports.LogLevel = {})); function makeConsoleLogger(name) { return (level, message, extraInfo) => { console[level](`${name} ${level}:`, message, extraInfo); }; } exports.makeConsoleLogger = makeConsoleLogger; /** * Transforms a log level into a comparable (numerical) value ordered by severity. */ function logLevelSeverity(level) { switch (level) { case LogLevel.DEBUG: return 20; case LogLevel.INFO: return 40; case LogLevel.WARN: return 60; case LogLevel.ERROR: return 80; default: return (0, utils_1.assertNever)(level); } } exports.logLevelSeverity = logLevelSeverity; } (logging)); var errors = {}; (function (exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.buildRequestError = exports.APIResponseError = exports.UnknownHTTPResponseError = exports.isHTTPResponseError = exports.RequestTimeoutError = exports.isNotionClientError = exports.ClientErrorCode = exports.APIErrorCode = void 0; const utils_1 = utils$1; /** * Error codes returned in responses from the API. */ var APIErrorCode; (function (APIErrorCode) { APIErrorCode["Unauthorized"] = "unauthorized"; APIErrorCode["RestrictedResource"] = "restricted_resource"; APIErrorCode["ObjectNotFound"] = "object_not_found"; APIErrorCode["RateLimited"] = "rate_limited"; APIErrorCode["InvalidJSON"] = "invalid_json"; APIErrorCode["InvalidRequestURL"] = "invalid_request_url"; APIErrorCode["InvalidRequest"] = "invalid_request"; APIErrorCode["ValidationError"] = "validation_error"; APIErrorCode["ConflictError"] = "conflict_error"; APIErrorCode["InternalServerError"] = "internal_server_error"; APIErrorCode["ServiceUnavailable"] = "service_unavailable"; })(APIErrorCode = exports.APIErrorCode || (exports.APIErrorCode = {})); /** * Error codes generated for client errors. */ var ClientErrorCode; (function (ClientErrorCode) { ClientErrorCode["RequestTimeout"] = "notionhq_client_request_timeout"; ClientErrorCode["ResponseError"] = "notionhq_client_response_error"; })(ClientErrorCode = exports.ClientErrorCode || (exports.ClientErrorCode = {})); /** * Base error type. */ class NotionClientErrorBase extends Error { } /** * @param error any value, usually a caught error. * @returns `true` if error is a `NotionClientError`. */ function isNotionClientError(error) { return (0, utils_1.isObject)(error) && error instanceof NotionClientErrorBase; } exports.isNotionClientError = isNotionClientError; /** * Narrows down the types of a NotionClientError. * @param error any value, usually a caught error. * @param codes an object mapping from possible error codes to `true` * @returns `true` if error is a `NotionClientError` with a code in `codes`. */ function isNotionClientErrorWithCode(error, codes) { return isNotionClientError(error) && error.code in codes; } /** * Error thrown by the client if a request times out. */ class RequestTimeoutError extends NotionClientErrorBase { constructor(message = "Request to Notion API has timed out") { super(message); this.code = ClientErrorCode.RequestTimeout; this.name = "RequestTimeoutError"; } static isRequestTimeoutError(error) { return isNotionClientErrorWithCode(error, { [ClientErrorCode.RequestTimeout]: true, }); } static rejectAfterTimeout(promise, timeoutMS) { return new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new RequestTimeoutError()); }, timeoutMS); promise .then(resolve) .catch(reject) .then(() => clearTimeout(timeoutId)); }); } } exports.RequestTimeoutError = RequestTimeoutError; class HTTPResponseError extends NotionClientErrorBase { constructor(args) { super(args.message); this.name = "HTTPResponseError"; const { code, status, headers, rawBodyText } = args; this.code = code; this.status = status; this.headers = headers; this.body = rawBodyText; } } const httpResponseErrorCodes = { [ClientErrorCode.ResponseError]: true, [APIErrorCode.Unauthorized]: true, [APIErrorCode.RestrictedResource]: true, [APIErrorCode.ObjectNotFound]: true, [APIErrorCode.RateLimited]: true, [APIErrorCode.InvalidJSON]: true, [APIErrorCode.InvalidRequestURL]: true, [APIErrorCode.InvalidRequest]: true, [APIErrorCode.ValidationError]: true, [APIErrorCode.ConflictError]: true, [APIErrorCode.InternalServerError]: true, [APIErrorCode.ServiceUnavailable]: true, }; function isHTTPResponseError(error) { if (!isNotionClientErrorWithCode(error, httpResponseErrorCodes)) { return false; } return true; } exports.isHTTPResponseError = isHTTPResponseError; /** * Error thrown if an API call responds with an unknown error code, or does not respond with * a property-formatted error. */ class UnknownHTTPResponseError extends HTTPResponseError { constructor(args) { var _a; super({ ...args, code: ClientErrorCode.ResponseError, message: (_a = args.message) !== null && _a !== void 0 ? _a : `Request to Notion API failed with status: ${args.status}`, }); this.name = "UnknownHTTPResponseError"; } static isUnknownHTTPResponseError(error) { return isNotionClientErrorWithCode(error, { [ClientErrorCode.ResponseError]: true, }); } } exports.UnknownHTTPResponseError = UnknownHTTPResponseError; const apiErrorCodes = { [APIErrorCode.Unauthorized]: true, [APIErrorCode.RestrictedResource]: true, [APIErrorCode.ObjectNotFound]: true, [APIErrorCode.RateLimited]: true, [APIErrorCode.InvalidJSON]: true, [APIErrorCode.InvalidRequestURL]: true, [APIErrorCode.InvalidRequest]: true, [APIErrorCode.ValidationError]: true, [APIErrorCode.ConflictError]: true, [APIErrorCode.InternalServerError]: true, [APIErrorCode.ServiceUnavailable]: true, }; /** * A response from the API indicating a problem. * Use the `code` property to handle various kinds of errors. All its possible values are in `APIErrorCode`. */ class APIResponseError extends HTTPResponseError { constructor() { super(...arguments); this.name = "APIResponseError"; } static isAPIResponseError(error) { return isNotionClientErrorWithCode(error, apiErrorCodes); } } exports.APIResponseError = APIResponseError; function buildRequestError(response, bodyText) { const apiErrorResponseBody = parseAPIErrorResponseBody(bodyText); if (apiErrorResponseBody !== undefined) { return new APIResponseError({ code: apiErrorResponseBody.code, message: apiErrorResponseBody.message, headers: response.headers, status: response.status, rawBodyText: bodyText, }); } return new UnknownHTTPResponseError({ message: undefined, headers: response.headers, status: response.status, rawBodyText: bodyText, }); } exports.buildRequestError = buildRequestError; function parseAPIErrorResponseBody(body) { if (typeof body !== "string") { return; } let parsed; try { parsed = JSON.parse(body); } catch (parseError) { return; } if (!(0, utils_1.isObject)(parsed) || typeof parsed["message"] !== "string" || !isAPIErrorCode(parsed["code"])) { return; } return { ...parsed, code: parsed["code"], message: parsed["message"], }; } function isAPIErrorCode(code) { return typeof code === "string" && code in apiErrorCodes; } } (errors)); var apiEndpoints = {}; // cspell:disable-file // Note: This is a generated file. Object.defineProperty(apiEndpoints, "__esModule", { value: true }); apiEndpoints.listComments = apiEndpoints.createComment = apiEndpoints.search = apiEndpoints.createDatabase = apiEndpoints.listDatabases = apiEndpoints.queryDatabase = apiEndpoints.updateDatabase = apiEndpoints.getDatabase = apiEndpoints.appendBlockChildren = apiEndpoints.listBlockChildren = apiEndpoints.deleteBlock = apiEndpoints.updateBlock = apiEndpoints.getBlock = apiEndpoints.getPageProperty = apiEndpoints.updatePage = apiEndpoints.getPage = apiEndpoints.createPage = apiEndpoints.listUsers = apiEndpoints.getUser = apiEndpoints.getSelf = void 0; apiEndpoints.getSelf = { method: "get", pathParams: [], queryParams: [], bodyParams: [], path: () => `users/me`, }; apiEndpoints.getUser = { method: "get", pathParams: ["user_id"], queryParams: [], bodyParams: [], path: (p) => `users/${p.user_id}`, }; apiEndpoints.listUsers = { method: "get", pathParams: [], queryParams: ["start_cursor", "page_size"], bodyParams: [], path: () => `users`, }; apiEndpoints.createPage = { method: "post", pathParams: [], queryParams: [], bodyParams: ["parent", "properties", "icon", "cover", "content", "children"], path: () => `pages`, }; apiEndpoints.getPage = { method: "get", pathParams: ["page_id"], queryParams: ["filter_properties"], bodyParams: [], path: (p) => `pages/${p.page_id}`, }; apiEndpoints.updatePage = { method: "patch", pathParams: ["page_id"], queryParams: [], bodyParams: ["properties", "icon", "cover", "archived"], path: (p) => `pages/${p.page_id}`, }; apiEndpoints.getPageProperty = { method: "get", pathParams: ["page_id", "property_id"], queryParams: ["start_cursor", "page_size"], bodyParams: [], path: (p) => `pages/${p.page_id}/properties/${p.property_id}`, }; apiEndpoints.getBlock = { method: "get", pathParams: ["block_id"], queryParams: [], bodyParams: [], path: (p) => `blocks/${p.block_id}`, }; apiEndpoints.updateBlock = { method: "patch", pathParams: ["block_id"], queryParams: [], bodyParams: [ "embed", "type", "archived", "bookmark", "image", "video", "pdf", "file", "audio", "code", "equation", "divider", "breadcrumb", "table_of_contents", "link_to_page", "table_row", "heading_1", "heading_2", "heading_3", "paragraph", "bulleted_list_item", "numbered_list_item", "quote", "to_do", "toggle", "template", "callout", "synced_block", "table", ], path: (p) => `blocks/${p.block_id}`, }; apiEndpoints.deleteBlock = { method: "delete", pathParams: ["block_id"], queryParams: [], bodyParams: [], path: (p) => `blocks/${p.block_id}`, }; apiEndpoints.listBlockChildren = { method: "get", pathParams: ["block_id"], queryParams: ["start_cursor", "page_size"], bodyParams: [], path: (p) => `blocks/${p.block_id}/children`, }; apiEndpoints.appendBlockChildren = { method: "patch", pathParams: ["block_id"], queryParams: [], bodyParams: ["children"], path: (p) => `blocks/${p.block_id}/children`, }; apiEndpoints.getDatabase = { method: "get", pathParams: ["database_id"], queryParams: [], bodyParams: [], path: (p) => `databases/${p.database_id}`, }; apiEndpoints.updateDatabase = { method: "patch", pathParams: ["database_id"], queryParams: [], bodyParams: [ "title", "description", "icon", "cover", "properties", "is_inline", "archived", ], path: (p) => `databases/${p.database_id}`, }; apiEndpoints.queryDatabase = { method: "post", pathParams: ["database_id"], queryParams: ["filter_properties"], bodyParams: ["sorts", "filter", "start_cursor", "page_size", "archived"], path: (p) => `databases/${p.database_id}/query`, }; apiEndpoints.listDatabases = { method: "get", pathParams: [], queryParams: ["start_cursor", "page_size"], bodyParams: [], path: () => `databases`, }; apiEndpoints.createDatabase = { method: "post", pathParams: [], queryParams: [], bodyParams: [ "parent", "properties", "icon", "cover", "title", "description", "is_inline", ], path: () => `databases`, }; apiEndpoints.search = { method: "post", pathParams: [], queryParams: [], bodyParams: ["sort", "query", "start_cursor", "page_size", "filter"], path: () => `search`, }; apiEndpoints.createComment = { method: "post", pathParams: [], queryParams: [], bodyParams: ["parent", "rich_text", "discussion_id"], path: () => `comments`, }; apiEndpoints.listComments = { method: "get", pathParams: [], queryParams: ["block_id", "start_cursor", "page_size"], bodyParams: [], path: () => `comments`, }; var publicApi = {}; var URL$2 = {exports: {}}; var conversions = {}; var lib$1 = conversions; function sign(x) { return x < 0 ? -1 : 1; } function evenRound(x) { // Round x to the nearest integer, choosing the even integer if it lies halfway between two. if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) return Math.floor(x); } else { return Math.round(x); } } function createNumberConversion(bitLength, typeOpts) { if (!typeOpts.unsigned) { --bitLength; } const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); const upperBound = Math.pow(2, bitLength) - 1; const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); return function(V, opts) { if (!opts) opts = {}; let x = +V; if (opts.enforceRange) { if (!Number.isFinite(x)) { throw new TypeError("Argument is not a finite number"); } x = sign(x) * Math.floor(Math.abs(x)); if (x < lowerBound || x > upperBound) { throw new TypeError("Argument is not in byte range"); } return x; } if (!isNaN(x) && opts.clamp) { x = evenRound(x); if (x < lowerBound) x = lowerBound; if (x > upperBound) x = upperBound; return x; } if (!Number.isFinite(x) || x === 0) { return 0; } x = sign(x) * Math.floor(Math.abs(x)); x = x % moduloVal; if (!typeOpts.unsigned && x >= moduloBound) { return x - moduloVal; } else if (typeOpts.unsigned) { if (x < 0) { x += moduloVal; } else if (x === -0) { // don't return negative zero return 0; } } return x; } } conversions["void"] = function () { return undefined; }; conversions["boolean"] = function (val) { return !!val; }; conversions["byte"] = createNumberConversion(8, { unsigned: false }); conversions["octet"] = createNumberConversion(8, { unsigned: true }); conversions["short"] = createNumberConversion(16, { unsigned: false }); conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); conversions["long"] = createNumberConversion(32, { unsigned: false }); conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); conversions["double"] = function (V) { const x = +V; if (!Number.isFinite(x)) { throw new TypeError("Argument is not a finite floating-point value"); } return x; }; conversions["unrestricted double"] = function (V) { const x = +V; if (isNaN(x)) { throw new TypeError("Argument is NaN"); } return x; }; // not quite valid, but good enough for JS conversions["float"] = conversions["double"]; conversions["unrestricted float"] = conversions["unrestricted double"]; conversions["DOMString"] = function (V, opts) { if (!opts) opts = {}; if (opts.treatNullAsEmptyString && V === null) { return ""; } return String(V); }; conversions["ByteString"] = function (V, opts) { const x = String(V); let c = undefined; for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { if (c > 255) { throw new TypeError("Argument is not a valid bytestring"); } } return x; }; conversions["USVString"] = function (V) { const S = String(V); const n = S.length; const U = []; for (let i = 0; i < n; ++i) { const c = S.charCodeAt(i); if (c < 0xD800 || c > 0xDFFF) { U.push(String.fromCodePoint(c)); } else if (0xDC00 <= c && c <= 0xDFFF) { U.push(String.fromCodePoint(0xFFFD)); } else { if (i === n - 1) { U.push(String.fromCodePoint(0xFFFD)); } else { const d = S.charCodeAt(i + 1); if (0xDC00 <= d && d <= 0xDFFF) { const a = c & 0x3FF; const b = d & 0x3FF; U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); ++i; } else { U.push(String.fromCodePoint(0xFFFD)); } } } } return U.join(''); }; conversions["Date"] = function (V, opts) { if (!(V instanceof Date)) { throw new TypeError("Argument is not a Date object"); } if (isNaN(V)) { return undefined; } return V; }; conversions["RegExp"] = function (V, opts) { if (!(V instanceof RegExp)) { V = new RegExp(V); } return V; }; var utils = {exports: {}}; (function (module) { module.exports.mixin = function mixin(target, source) { const keys = Object.getOwnPropertyNames(source); for (let i = 0; i < keys.length; ++i) { Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); } }; module.exports.wrapperSymbol = Symbol("wrapper"); module.exports.implSymbol = Symbol("impl"); module.exports.wrapperForImpl = function (impl) { return impl[module.exports.wrapperSymbol]; }; module.exports.implForWrapper = function (wrapper) { return wrapper[module.exports.implSymbol]; }; } (utils)); var utilsExports = utils.exports; var URLImpl = {}; var urlStateMachine = {exports: {}}; var tr46 = {}; var require$$1 = [ [ [ 0, 44 ], "disallowed_STD3_valid" ], [ [ 45, 46 ], "valid" ], [ [ 47, 47 ], "disallowed_STD3_valid" ], [ [ 48, 57 ], "valid" ], [ [ 58, 64 ], "disallowed_STD3_valid" ], [ [ 65, 65 ], "mapped", [ 97 ] ], [ [ 66, 66 ], "mapped", [ 98 ] ], [ [ 67, 67 ], "mapped", [ 99 ] ], [ [ 68, 68 ], "mapped", [ 100 ] ], [ [ 69, 69 ], "mapped", [ 101 ] ], [ [ 70, 70 ], "mapped", [ 102 ] ], [ [ 71, 71 ], "mapped", [ 103 ] ], [ [ 72, 72 ], "mapped", [ 104 ] ], [ [ 73, 73 ], "mapped", [ 105 ] ], [ [ 74, 74 ], "mapped", [ 106 ] ], [ [ 75, 75 ], "mapped", [ 107 ] ], [ [ 76, 76 ], "mapped", [ 108 ] ], [ [ 77, 77 ], "mapped", [ 109 ] ], [ [ 78, 78 ], "mapped", [ 110 ] ], [ [ 79, 79 ], "mapped", [ 111 ] ], [ [ 80, 80 ], "mapped", [ 112 ] ], [ [ 81, 81 ], "mapped", [ 113 ] ], [ [ 82, 82 ], "mapped", [ 114 ] ], [ [ 83, 83 ], "mapped", [ 115 ] ], [ [ 84, 84 ], "mapped", [ 116 ] ], [ [ 85, 85 ], "mapped", [ 117 ] ], [ [ 86, 86 ], "mapped", [ 118 ] ], [ [ 87, 87 ], "mapped", [ 119 ] ], [ [ 88, 88 ], "mapped", [ 120 ] ], [ [ 89, 89 ], "mapped", [ 121 ] ], [ [ 90, 90 ], "mapped", [ 122 ] ], [ [ 91, 96 ], "disallowed_STD3_valid" ], [ [ 97, 122 ], "valid" ], [ [ 123, 127 ], "disallowed_STD3_valid" ], [ [ 128, 159 ], "disallowed" ], [ [ 160, 160 ], "disallowed_STD3_mapped", [ 32 ] ], [ [ 161, 167 ], "valid", [ ], "NV8" ], [ [ 168, 168 ], "disallowed_STD3_mapped", [ 32, 776 ] ], [ [ 169, 169 ], "valid", [ ], "NV8" ], [ [ 170, 170 ], "mapped", [ 97 ] ], [ [ 171, 172 ], "valid", [ ], "NV8" ], [ [ 173, 173 ], "ignored" ], [ [ 174, 174 ], "valid", [ ], "NV8" ], [ [ 175, 175 ], "disallowed_STD3_mapped", [ 32, 772 ] ], [ [ 176, 177 ], "valid", [ ], "NV8" ], [ [ 178, 178 ], "mapped", [ 50 ] ], [ [ 179, 179 ], "mapped", [ 51 ] ], [ [ 180, 180 ], "disallowed_STD3_mapped", [ 32, 769 ] ], [ [ 181, 181 ], "mapped", [ 956 ] ], [ [ 182, 182 ], "valid", [ ], "NV8" ], [ [ 183, 183 ], "valid" ], [ [ 184, 184 ], "disallowed_STD3_mapped", [ 32, 807 ] ], [ [ 185, 185 ], "mapped", [ 49 ] ], [ [ 186, 186 ], "mapped", [ 111 ] ], [ [ 187, 187 ], "valid", [ ], "NV8" ], [ [ 188, 188 ], "mapped", [ 49, 8260, 52 ] ], [ [ 189, 189 ], "mapped", [ 49, 8260, 50 ] ], [ [ 190, 190 ], "mapped", [ 51, 8260, 52 ] ], [ [ 191, 191 ], "valid", [ ], "NV8" ], [ [ 192, 192 ], "mapped", [ 224 ] ], [ [ 193, 193 ], "mapped", [ 225 ] ], [ [ 194, 194 ], "mapped", [ 226 ] ], [ [ 195, 195 ], "mapped", [ 227 ] ], [ [ 196, 196 ], "mapped", [ 228 ] ], [ [ 197, 197 ], "mapped", [ 229 ] ], [ [ 198, 198 ], "mapped", [ 230 ] ], [ [ 199, 199 ], "mapped", [ 231 ] ], [ [ 200, 200 ], "mapped", [ 232 ] ], [ [ 201, 201 ], "mapped", [ 233 ] ], [ [ 202, 202 ], "mapped", [ 234 ] ], [ [ 203, 203 ], "mapped", [ 235 ] ], [ [ 204, 204 ], "mapped", [ 236 ] ], [ [ 205, 205 ], "mapped", [ 237 ] ], [ [ 206, 206 ], "mapped", [ 238 ] ], [ [ 207, 207 ], "mapped", [ 239 ] ], [ [ 208, 208 ], "mapped", [ 240 ] ], [ [ 209, 209 ], "mapped", [ 241 ] ], [ [ 210, 210 ], "mapped", [ 242 ] ], [ [ 211, 211 ], "mapped", [ 243 ] ], [ [ 212, 212 ], "mapped", [ 244 ] ], [ [ 213, 213 ], "mapped", [ 245 ] ], [ [ 214, 214 ], "mapped", [ 246 ] ], [ [ 215, 215 ], "valid", [ ], "NV8" ], [ [ 216, 216 ], "mapped", [ 248 ] ], [ [ 217, 217 ], "mapped", [ 249 ] ], [ [ 218, 218 ], "mapped", [ 250 ] ], [ [ 219, 219 ], "mapped", [ 251 ] ], [ [ 220, 220 ], "mapped", [ 252 ] ], [ [ 221, 221 ], "mapped", [ 253 ] ], [ [ 222, 222 ], "mapped", [ 254 ] ], [ [ 223, 223 ], "deviation", [ 115, 115 ] ], [ [ 224, 246 ], "valid" ], [ [ 247, 247 ], "valid", [ ], "NV8" ], [ [ 248, 255 ], "valid" ], [ [ 256, 256 ], "mapped", [ 257 ] ], [ [ 257, 257 ], "valid" ], [ [ 258, 258 ], "mapped", [ 259 ] ], [ [ 259, 259 ], "valid" ], [ [ 260, 260 ], "mapped", [ 261 ] ], [ [ 261, 261 ], "valid" ], [ [ 262, 262 ], "mapped", [ 263 ] ], [ [ 263, 263 ], "valid" ], [ [ 264, 264 ], "mapped", [ 265 ] ], [ [ 265, 265 ], "valid" ], [ [ 266, 266 ], "mapped", [ 267 ] ], [ [ 267, 267 ], "valid" ], [ [ 268, 268 ], "mapped", [ 269 ] ], [ [ 269, 269 ], "valid" ], [ [ 270, 270 ], "mapped", [ 271 ] ], [ [ 271, 271 ], "valid" ], [ [ 272, 272 ], "mapped", [ 273 ] ], [ [ 273, 273 ], "valid" ], [ [ 274, 274 ], "mapped", [ 275 ] ], [ [ 275, 275 ], "valid" ], [ [ 276, 276 ], "mapped", [ 277 ] ], [ [ 277, 277 ], "valid" ], [ [ 278, 278 ], "mapped", [ 279 ] ], [ [ 279, 279 ], "valid" ], [ [ 280, 280 ], "mapped", [ 281 ] ], [ [ 281, 281 ], "valid" ], [ [ 282, 282 ], "mapped", [ 283 ] ], [ [ 283, 283 ], "valid" ], [ [ 284, 284 ], "mapped", [ 285 ] ], [ [ 285, 285 ], "valid" ], [ [ 286, 286 ], "mapped", [ 287 ] ], [ [ 287, 287 ], "valid" ], [ [ 288, 288 ], "mapped", [ 289 ] ], [ [ 289, 289 ], "valid" ], [ [ 290, 290 ], "mapped", [ 291 ] ], [ [ 291, 291 ], "valid" ], [ [ 292, 292 ], "mapped", [ 293 ] ], [ [ 293, 293 ], "valid" ], [ [ 294, 294 ], "mapped", [ 295 ] ], [ [ 295, 295 ], "valid" ], [ [ 296, 296 ], "mapped", [ 297 ] ], [ [ 297, 297 ], "valid" ], [ [ 298, 298 ], "mapped", [ 299 ] ], [ [ 299, 299 ], "valid" ], [ [ 300, 300 ], "mapped", [ 301 ] ], [ [ 301, 301 ], "valid" ], [ [ 302, 302 ], "mapped", [ 303 ] ], [ [ 303, 303 ], "valid" ], [ [ 304, 304 ], "mapped", [ 105, 775 ] ], [ [ 305, 305 ], "valid" ], [ [ 306, 307 ], "mapped", [ 105, 106 ] ], [ [ 308, 308 ], "mapped", [ 309 ] ], [ [ 309, 309 ], "valid" ], [ [ 310, 310 ], "mapped", [ 311 ] ], [ [ 311, 312 ], "valid" ], [ [ 313, 313 ], "mapped", [ 314 ] ], [ [ 314, 314 ], "valid" ], [ [ 315, 315 ], "mapped", [ 316 ] ], [ [ 316, 316 ], "valid" ], [ [ 317, 317 ], "mapped", [ 318 ] ], [ [ 318, 318 ], "valid" ], [ [ 319, 320 ], "mapped", [ 108, 183 ] ], [ [ 321, 321 ], "mapped", [ 322 ] ], [ [ 322, 322 ], "valid" ], [ [ 323, 323 ], "mapped", [ 324 ] ], [ [ 324, 324 ], "valid" ], [ [ 325, 325 ], "mapped", [ 326 ] ], [ [ 326, 326 ], "valid" ], [ [ 327, 327 ], "mapped", [ 328 ] ], [ [ 328, 328 ], "valid" ], [ [ 329, 329 ], "mapped", [ 700, 110 ] ], [ [ 330, 330 ], "mapped", [ 331 ] ], [ [ 331, 331 ], "valid" ], [ [ 332, 332 ], "mapped", [ 333 ] ], [ [ 333, 333 ], "valid" ], [ [ 334, 334 ], "mapped", [ 335 ] ], [ [ 335, 335 ], "valid" ], [ [ 336, 336 ], "mapped", [ 337 ] ], [ [ 337, 337 ], "valid" ], [ [ 338, 338 ], "mapped", [ 339 ] ], [ [ 339, 339 ], "valid" ], [ [ 340, 340 ], "mapped", [ 341 ] ], [ [ 341, 341 ], "valid" ], [ [ 342, 342 ], "mapped", [ 343 ] ], [ [ 343, 343 ], "valid" ], [ [ 344, 344 ], "mapped", [ 345 ] ], [ [ 345, 345 ], "valid" ], [ [ 346, 346 ], "mapped", [ 347 ] ], [ [ 347, 347 ], "valid" ], [ [ 348, 348 ], "mapped", [ 349 ] ], [ [ 349, 349 ], "valid" ], [ [ 350, 350 ], "mapped", [ 351 ] ], [ [ 351, 351 ], "valid" ], [ [ 352, 352 ], "mapped", [ 353 ] ], [ [ 353, 353 ], "valid" ], [ [ 354, 354 ], "mapped", [ 355 ] ], [ [ 355, 355 ], "valid" ], [ [ 356, 356 ], "mapped", [ 357 ] ], [ [ 357, 357 ], "valid" ], [ [ 358, 358 ], "mapped", [ 359 ] ], [ [ 359, 359 ], "valid" ], [ [ 360, 360 ], "mapped", [ 361 ] ], [ [ 361, 361 ], "valid" ], [ [ 362, 362 ], "mapped", [ 363 ] ], [ [ 363, 363 ], "valid" ], [ [ 364, 364 ], "mapped", [ 365 ] ], [ [ 365, 365 ], "valid" ], [ [ 366, 366 ], "mapped", [ 367 ] ], [ [ 367, 367 ], "valid" ], [ [ 368, 368 ], "mapped", [ 369 ] ], [ [ 369, 369 ], "valid" ], [ [ 370, 370 ], "mapped", [ 371 ] ], [ [ 371, 371 ], "valid" ], [ [ 372, 372 ], "mapped", [ 373 ] ], [ [ 373, 373 ], "valid" ], [ [ 374, 374 ], "mapped", [ 375 ] ], [ [ 375, 375 ], "valid" ], [ [ 376, 376 ], "mapped", [ 255 ] ], [ [ 377, 377 ], "mapped", [ 378 ] ], [ [ 378, 378 ], "valid" ], [ [ 379, 379 ], "mapped", [ 380 ] ], [ [ 380, 380 ], "valid" ], [ [ 381, 381 ], "mapped", [ 382 ] ], [ [ 382, 382 ], "valid" ], [ [ 383, 383 ], "mapped", [ 115 ] ], [ [ 384, 384 ], "valid" ], [ [ 385, 385 ], "mapped", [ 595 ] ], [ [ 386, 386 ], "mapped", [ 387 ] ], [ [ 387, 387 ], "valid" ], [ [ 388, 388 ], "mapped", [ 389 ] ], [ [ 389, 389 ], "valid" ], [ [ 390, 390 ], "mapped", [ 596 ] ], [ [ 391, 391 ], "mapped", [ 392 ] ], [ [ 392, 392 ], "valid" ], [ [ 393, 393 ], "mapped", [ 598 ] ], [ [ 394, 394 ], "mapped", [ 599 ] ], [ [ 395, 395 ], "mapped", [ 396 ] ], [ [ 396, 397 ], "valid" ], [ [ 398, 398 ], "mapped", [ 477 ] ], [ [ 399, 399 ], "mapped", [ 601 ] ], [ [ 400, 400 ], "mapped", [ 603 ] ], [ [ 401, 401 ], "mapped", [ 402 ] ], [ [ 402, 402 ], "valid" ], [ [ 403, 403 ], "mapped", [ 608 ] ], [ [ 404, 404 ], "mapped", [ 611 ] ], [ [ 405, 405 ], "valid" ], [ [ 406, 406 ], "mapped", [ 617 ] ], [ [ 407, 407 ], "mapped", [ 616 ] ], [ [ 408, 408 ], "mapped", [ 409 ] ], [ [ 409, 411 ], "valid" ], [ [ 412, 412 ], "mapped", [ 623 ] ], [ [ 413, 413 ], "mapped", [ 626 ] ], [ [ 414, 414 ], "valid" ], [ [ 415, 415 ], "mapped", [ 629 ] ], [ [ 416, 416 ], "mapped", [ 417 ] ], [ [ 417, 417 ], "valid" ], [ [ 418, 418 ], "mapped", [ 419 ] ], [ [ 419, 419 ], "valid" ], [ [ 420, 420 ], "mapped", [ 421 ] ], [ [ 421, 421 ], "valid" ], [ [ 422, 422 ], "mapped", [ 640 ] ], [ [ 423, 423 ], "mapped", [ 424 ] ], [ [ 424, 424 ], "valid" ], [ [ 425, 425 ], "mapped", [ 643 ] ], [ [ 426, 427 ], "valid" ], [ [ 428, 428 ], "mapped", [ 429 ] ], [ [ 429, 429 ], "valid" ], [ [ 430, 430 ], "mapped", [ 648 ] ], [ [ 431, 431 ], "mapped", [ 432 ] ], [ [ 432, 432 ], "valid" ], [ [ 433, 433 ], "mapped", [ 650 ] ], [ [ 434, 434 ], "mapped", [ 651 ] ], [ [ 435, 435 ],